18 #ifndef UA_DYNAMIC_LINKING_EXPORT 19 # define UA_DYNAMIC_LINKING_EXPORT 110 #if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) 111 #define _Q_INVALIDATE(a) (a) = ((void *)-1) 113 #define _Q_INVALIDATE(a) 119 #define SLIST_HEAD(name, type) \ 121 struct type *slh_first; \ 124 #define SLIST_HEAD_INITIALIZER(head) \ 132 #define SLIST_ENTRY(type) \ 134 struct type *sle_next; \ 140 #define SLIST_FIRST(head) ((head)->slh_first) 141 #define SLIST_END(head) NULL 142 #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) 143 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) 145 #define SLIST_FOREACH(var, head, field) \ 146 for((var) = SLIST_FIRST(head); \ 147 (var) != SLIST_END(head); \ 148 (var) = SLIST_NEXT(var, field)) 150 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 151 for ((var) = SLIST_FIRST(head); \ 152 (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ 158 #define SLIST_INIT(head) { \ 159 SLIST_FIRST(head) = SLIST_END(head); \ 162 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ 163 (elm)->field.sle_next = (slistelm)->field.sle_next; \ 164 (slistelm)->field.sle_next = (elm); \ 167 #define SLIST_INSERT_HEAD(head, elm, field) do { \ 168 (elm)->field.sle_next = (head)->slh_first; \ 169 (head)->slh_first = (elm); \ 172 #define SLIST_REMOVE_AFTER(elm, field) do { \ 173 (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ 176 #define SLIST_REMOVE_HEAD(head, field) do { \ 177 (head)->slh_first = (head)->slh_first->field.sle_next; \ 180 #define SLIST_REMOVE(head, elm, type, field) do { \ 181 if ((head)->slh_first == (elm)) { \ 182 SLIST_REMOVE_HEAD((head), field); \ 184 struct type *curelm = (head)->slh_first; \ 186 while (curelm->field.sle_next != (elm)) \ 187 curelm = curelm->field.sle_next; \ 188 curelm->field.sle_next = \ 189 curelm->field.sle_next->field.sle_next; \ 190 _Q_INVALIDATE((elm)->field.sle_next); \ 197 #define LIST_HEAD(name, type) \ 199 struct type *lh_first; \ 202 #define LIST_HEAD_INITIALIZER(head) \ 205 #define LIST_ENTRY(type) \ 207 struct type *le_next; \ 208 struct type **le_prev; \ 214 #define LIST_FIRST(head) ((head)->lh_first) 215 #define LIST_END(head) NULL 216 #define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) 217 #define LIST_NEXT(elm, field) ((elm)->field.le_next) 219 #define LIST_FOREACH(var, head, field) \ 220 for((var) = LIST_FIRST(head); \ 221 (var)!= LIST_END(head); \ 222 (var) = LIST_NEXT(var, field)) 224 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ 225 for ((var) = LIST_FIRST(head); \ 226 (var) && ((tvar) = LIST_NEXT(var, field), 1); \ 232 #define LIST_INIT(head) do { \ 233 LIST_FIRST(head) = LIST_END(head); \ 236 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ 237 if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ 238 (listelm)->field.le_next->field.le_prev = \ 239 &(elm)->field.le_next; \ 240 (listelm)->field.le_next = (elm); \ 241 (elm)->field.le_prev = &(listelm)->field.le_next; \ 244 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 245 (elm)->field.le_prev = (listelm)->field.le_prev; \ 246 (elm)->field.le_next = (listelm); \ 247 *(listelm)->field.le_prev = (elm); \ 248 (listelm)->field.le_prev = &(elm)->field.le_next; \ 251 #define LIST_INSERT_HEAD(head, elm, field) do { \ 252 if (((elm)->field.le_next = (head)->lh_first) != NULL) \ 253 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ 254 (head)->lh_first = (elm); \ 255 (elm)->field.le_prev = &(head)->lh_first; \ 258 #define LIST_REMOVE(elm, field) do { \ 259 if ((elm)->field.le_next != NULL) \ 260 (elm)->field.le_next->field.le_prev = \ 261 (elm)->field.le_prev; \ 262 *(elm)->field.le_prev = (elm)->field.le_next; \ 263 _Q_INVALIDATE((elm)->field.le_prev); \ 264 _Q_INVALIDATE((elm)->field.le_next); \ 267 #define LIST_REPLACE(elm, elm2, field) do { \ 268 if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ 269 (elm2)->field.le_next->field.le_prev = \ 270 &(elm2)->field.le_next; \ 271 (elm2)->field.le_prev = (elm)->field.le_prev; \ 272 *(elm2)->field.le_prev = (elm2); \ 273 _Q_INVALIDATE((elm)->field.le_prev); \ 274 _Q_INVALIDATE((elm)->field.le_next); \ 280 #define SIMPLEQ_HEAD(name, type) \ 282 struct type *sqh_first; \ 283 struct type **sqh_last; \ 286 #define SIMPLEQ_HEAD_INITIALIZER(head) \ 287 { NULL, &(head).sqh_first } 289 #define SIMPLEQ_ENTRY(type) \ 291 struct type *sqe_next; \ 297 #define SIMPLEQ_FIRST(head) ((head)->sqh_first) 298 #define SIMPLEQ_END(head) NULL 299 #define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) 300 #define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) 302 #define SIMPLEQ_FOREACH(var, head, field) \ 303 for((var) = SIMPLEQ_FIRST(head); \ 304 (var) != SIMPLEQ_END(head); \ 305 (var) = SIMPLEQ_NEXT(var, field)) 307 #define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 308 for ((var) = SIMPLEQ_FIRST(head); \ 309 (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ 315 #define SIMPLEQ_INIT(head) do { \ 316 (head)->sqh_first = NULL; \ 317 (head)->sqh_last = &(head)->sqh_first; \ 320 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 321 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ 322 (head)->sqh_last = &(elm)->field.sqe_next; \ 323 (head)->sqh_first = (elm); \ 326 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 327 (elm)->field.sqe_next = NULL; \ 328 *(head)->sqh_last = (elm); \ 329 (head)->sqh_last = &(elm)->field.sqe_next; \ 332 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 333 if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ 334 (head)->sqh_last = &(elm)->field.sqe_next; \ 335 (listelm)->field.sqe_next = (elm); \ 338 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \ 339 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ 340 (head)->sqh_last = &(head)->sqh_first; \ 343 #define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 344 if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ 346 (head)->sqh_last = &(elm)->field.sqe_next; \ 352 #define XSIMPLEQ_HEAD(name, type) \ 354 struct type *sqx_first; \ 355 struct type **sqx_last; \ 356 unsigned long sqx_cookie; \ 359 #define XSIMPLEQ_ENTRY(type) \ 361 struct type *sqx_next; \ 367 #define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ 368 (unsigned long)(ptr))) 369 #define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) 370 #define XSIMPLEQ_END(head) NULL 371 #define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) 372 #define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) 375 #define XSIMPLEQ_FOREACH(var, head, field) \ 376 for ((var) = XSIMPLEQ_FIRST(head); \ 377 (var) != XSIMPLEQ_END(head); \ 378 (var) = XSIMPLEQ_NEXT(head, var, field)) 380 #define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 381 for ((var) = XSIMPLEQ_FIRST(head); \ 382 (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ 388 #define XSIMPLEQ_INIT(head) do { \ 389 arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ 390 (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ 391 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 394 #define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 395 if (((elm)->field.sqx_next = (head)->sqx_first) == \ 396 XSIMPLEQ_XOR(head, NULL)) \ 397 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 398 (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \ 401 #define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 402 (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \ 403 *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \ 404 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 407 #define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 408 if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \ 409 XSIMPLEQ_XOR(head, NULL)) \ 410 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 411 (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \ 414 #define XSIMPLEQ_REMOVE_HEAD(head, field) do { \ 415 if (((head)->sqx_first = XSIMPLEQ_XOR(head, \ 416 (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \ 417 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 420 #define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 421 if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \ 422 (elm)->field.sqx_next)->field.sqx_next) \ 423 == XSIMPLEQ_XOR(head, NULL)) \ 425 XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 432 #define TAILQ_HEAD(name, type) \ 434 struct type *tqh_first; \ 435 struct type **tqh_last; \ 438 #define TAILQ_HEAD_INITIALIZER(head) \ 439 { NULL, &(head).tqh_first } 441 #define TAILQ_ENTRY(type) \ 443 struct type *tqe_next; \ 444 struct type **tqe_prev; \ 450 #define TAILQ_FIRST(head) ((head)->tqh_first) 451 #define TAILQ_END(head) NULL 452 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 453 #define TAILQ_LAST(head, headname) \ 454 (*(((struct headname *)((head)->tqh_last))->tqh_last)) 456 #define TAILQ_PREV(elm, headname, field) \ 457 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 458 #define TAILQ_EMPTY(head) \ 459 (TAILQ_FIRST(head) == TAILQ_END(head)) 461 #define TAILQ_FOREACH(var, head, field) \ 462 for((var) = TAILQ_FIRST(head); \ 463 (var) != TAILQ_END(head); \ 464 (var) = TAILQ_NEXT(var, field)) 466 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 467 for ((var) = TAILQ_FIRST(head); \ 468 (var) != TAILQ_END(head) && \ 469 ((tvar) = TAILQ_NEXT(var, field), 1); \ 473 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 474 for((var) = TAILQ_LAST(head, headname); \ 475 (var) != TAILQ_END(head); \ 476 (var) = TAILQ_PREV(var, headname, field)) 478 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 479 for ((var) = TAILQ_LAST(head, headname); \ 480 (var) != TAILQ_END(head) && \ 481 ((tvar) = TAILQ_PREV(var, headname, field), 1); \ 487 #define TAILQ_INIT(head) do { \ 488 (head)->tqh_first = NULL; \ 489 (head)->tqh_last = &(head)->tqh_first; \ 492 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ 493 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ 494 (head)->tqh_first->field.tqe_prev = \ 495 &(elm)->field.tqe_next; \ 497 (head)->tqh_last = &(elm)->field.tqe_next; \ 498 (head)->tqh_first = (elm); \ 499 (elm)->field.tqe_prev = &(head)->tqh_first; \ 502 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ 503 (elm)->field.tqe_next = NULL; \ 504 (elm)->field.tqe_prev = (head)->tqh_last; \ 505 *(head)->tqh_last = (elm); \ 506 (head)->tqh_last = &(elm)->field.tqe_next; \ 509 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 510 if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ 511 (elm)->field.tqe_next->field.tqe_prev = \ 512 &(elm)->field.tqe_next; \ 514 (head)->tqh_last = &(elm)->field.tqe_next; \ 515 (listelm)->field.tqe_next = (elm); \ 516 (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ 519 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 520 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 521 (elm)->field.tqe_next = (listelm); \ 522 *(listelm)->field.tqe_prev = (elm); \ 523 (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ 526 #define TAILQ_REMOVE(head, elm, field) do { \ 527 if (((elm)->field.tqe_next) != NULL) \ 528 (elm)->field.tqe_next->field.tqe_prev = \ 529 (elm)->field.tqe_prev; \ 531 (head)->tqh_last = (elm)->field.tqe_prev; \ 532 *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ 533 _Q_INVALIDATE((elm)->field.tqe_prev); \ 534 _Q_INVALIDATE((elm)->field.tqe_next); \ 537 #define TAILQ_REPLACE(head, elm, elm2, field) do { \ 538 if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ 539 (elm2)->field.tqe_next->field.tqe_prev = \ 540 &(elm2)->field.tqe_next; \ 542 (head)->tqh_last = &(elm2)->field.tqe_next; \ 543 (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ 544 *(elm2)->field.tqe_prev = (elm2); \ 545 _Q_INVALIDATE((elm)->field.tqe_prev); \ 546 _Q_INVALIDATE((elm)->field.tqe_next); \ 552 #define CIRCLEQ_HEAD(name, type) \ 554 struct type *cqh_first; \ 555 struct type *cqh_last; \ 558 #define CIRCLEQ_HEAD_INITIALIZER(head) \ 559 { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } 561 #define CIRCLEQ_ENTRY(type) \ 563 struct type *cqe_next; \ 564 struct type *cqe_prev; \ 570 #define CIRCLEQ_FIRST(head) ((head)->cqh_first) 571 #define CIRCLEQ_LAST(head) ((head)->cqh_last) 572 #define CIRCLEQ_END(head) ((void *)(head)) 573 #define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) 574 #define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) 575 #define CIRCLEQ_EMPTY(head) \ 576 (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) 578 #define CIRCLEQ_FOREACH(var, head, field) \ 579 for((var) = CIRCLEQ_FIRST(head); \ 580 (var) != CIRCLEQ_END(head); \ 581 (var) = CIRCLEQ_NEXT(var, field)) 583 #define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \ 584 for ((var) = CIRCLEQ_FIRST(head); \ 585 (var) != CIRCLEQ_END(head) && \ 586 ((tvar) = CIRCLEQ_NEXT(var, field), 1); \ 589 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ 590 for((var) = CIRCLEQ_LAST(head); \ 591 (var) != CIRCLEQ_END(head); \ 592 (var) = CIRCLEQ_PREV(var, field)) 594 #define CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 595 for ((var) = CIRCLEQ_LAST(head, headname); \ 596 (var) != CIRCLEQ_END(head) && \ 597 ((tvar) = CIRCLEQ_PREV(var, headname, field), 1); \ 603 #define CIRCLEQ_INIT(head) do { \ 604 (head)->cqh_first = CIRCLEQ_END(head); \ 605 (head)->cqh_last = CIRCLEQ_END(head); \ 608 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 609 (elm)->field.cqe_next = (listelm)->field.cqe_next; \ 610 (elm)->field.cqe_prev = (listelm); \ 611 if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ 612 (head)->cqh_last = (elm); \ 614 (listelm)->field.cqe_next->field.cqe_prev = (elm); \ 615 (listelm)->field.cqe_next = (elm); \ 618 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ 619 (elm)->field.cqe_next = (listelm); \ 620 (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ 621 if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ 622 (head)->cqh_first = (elm); \ 624 (listelm)->field.cqe_prev->field.cqe_next = (elm); \ 625 (listelm)->field.cqe_prev = (elm); \ 628 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ 629 (elm)->field.cqe_next = (head)->cqh_first; \ 630 (elm)->field.cqe_prev = CIRCLEQ_END(head); \ 631 if ((head)->cqh_last == CIRCLEQ_END(head)) \ 632 (head)->cqh_last = (elm); \ 634 (head)->cqh_first->field.cqe_prev = (elm); \ 635 (head)->cqh_first = (elm); \ 638 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ 639 (elm)->field.cqe_next = CIRCLEQ_END(head); \ 640 (elm)->field.cqe_prev = (head)->cqh_last; \ 641 if ((head)->cqh_first == CIRCLEQ_END(head)) \ 642 (head)->cqh_first = (elm); \ 644 (head)->cqh_last->field.cqe_next = (elm); \ 645 (head)->cqh_last = (elm); \ 648 #define CIRCLEQ_REMOVE(head, elm, field) do { \ 649 if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ 650 (head)->cqh_last = (elm)->field.cqe_prev; \ 652 (elm)->field.cqe_next->field.cqe_prev = \ 653 (elm)->field.cqe_prev; \ 654 if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ 655 (head)->cqh_first = (elm)->field.cqe_next; \ 657 (elm)->field.cqe_prev->field.cqe_next = \ 658 (elm)->field.cqe_next; \ 659 _Q_INVALIDATE((elm)->field.cqe_prev); \ 660 _Q_INVALIDATE((elm)->field.cqe_next); \ 663 #define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ 664 if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ 666 (head)->cqh_last = (elm2); \ 668 (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ 669 if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ 671 (head)->cqh_first = (elm2); \ 673 (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ 674 _Q_INVALIDATE((elm)->field.cqe_prev); \ 675 _Q_INVALIDATE((elm)->field.cqe_next); \ 716 #define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } 744 #define UA_assert(ignore) assert(ignore) 749 #define container_of(ptr, type, member) \ 750 (type *)((uintptr_t)ptr - offsetof(type,member)) 758 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 759 # define UA_THREAD_LOCAL _Thread_local 760 #elif defined(__GNUC__) 761 # define UA_THREAD_LOCAL __thread 762 #elif defined(_MSC_VER) 763 # define UA_THREAD_LOCAL __declspec(thread) 765 # warning The compiler does not support thread-local variables 766 # define UA_THREAD_LOCAL 788 #ifndef UA_ENABLE_MULTITHREADING 789 # define UA_atomic_sync() 792 # define UA_atomic_sync() _ReadWriteBarrier() 794 # define UA_atomic_sync() __sync_synchronize() 799 UA_atomic_xchg(
void *
volatile * addr,
void *newptr) {
800 #ifndef UA_ENABLE_MULTITHREADING 806 return _InterlockedExchangePointer(addr, newptr);
808 return __sync_lock_test_and_set(addr, newptr);
814 UA_atomic_cmpxchg(
void *
volatile * addr,
void *expected,
void *newptr) {
815 #ifndef UA_ENABLE_MULTITHREADING 817 if(old == expected) {
823 return _InterlockedCompareExchangePointer(addr, expected, newptr);
825 return __sync_val_compare_and_swap(addr, expected, newptr);
831 UA_atomic_add(
volatile uint32_t *addr, uint32_t increase) {
832 #ifndef UA_ENABLE_MULTITHREADING 837 return _InterlockedExchangeAdd(addr, increase) + increase;
839 return __sync_add_and_fetch(addr, increase);
2518 #define UA_TRANSPORT_COUNT 12 2530 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY 0 2542 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER 1 2557 #define UA_TRANSPORT_TCPHELLOMESSAGE 2 2568 #define UA_TRANSPORT_TCPERRORMESSAGE 3 2585 #define UA_TRANSPORT_MESSAGETYPE 4 2597 #define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER 5 2611 #define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE 6 2622 #define UA_TRANSPORT_SEQUENCEHEADER 7 2633 #define UA_TRANSPORT_TCPMESSAGEHEADER 8 2647 #define UA_TRANSPORT_CHUNKTYPE 9 2657 #define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER 10 2668 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER 11 2686 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2687 # pragma GCC diagnostic push 2688 # pragma GCC diagnostic ignored "-Wmissing-field-initializers" 2689 # pragma GCC diagnostic ignored "-Wmissing-braces" 2700 UA_SecureConversationMessageAbortBody_new(
void) {
2726 UA_SecureConversationMessageFooter_new(
void) {
2752 UA_TcpHelloMessage_new(
void) {
2778 UA_TcpErrorMessage_new(
void) {
2804 UA_MessageType_new(
void) {
2829 UA_AsymmetricAlgorithmSecurityHeader_new(
void) {
2855 UA_TcpAcknowledgeMessage_new(
void) {
2880 UA_SequenceHeader_new(
void) {
2905 UA_TcpMessageHeader_new(
void) {
2930 UA_ChunkType_new(
void) {
2955 UA_SymmetricAlgorithmSecurityHeader_new(
void) {
2980 UA_SecureConversationMessageHeader_new(
void) {
2998 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2999 # pragma GCC diagnostic pop 3195 const char ** port,
const char ** path);
3257 const
void *content, const
UA_DataType *contentType);
3276 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3277 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3278 ((CHANNEL)->connection ? CHANNEL->connection->sockfd : 0), \ 3279 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3281 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3282 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3283 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3284 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3286 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3287 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3288 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3289 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3291 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3292 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3293 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3294 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3296 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3297 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3298 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3299 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3301 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3302 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3303 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3304 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3356 #define UA_NODE_BASEATTRIBUTES \ 3358 UA_NodeClass nodeClass; \ 3359 UA_QualifiedName browseName; \ 3360 UA_LocalizedText displayName; \ 3361 UA_LocalizedText description; \ 3362 UA_UInt32 writeMask; \ 3363 UA_UInt32 userWriteMask; \ 3364 size_t referencesSize; \ 3365 UA_ReferenceNode *references; 3443 #define UA_NODE_VARIABLEATTRIBUTES \ 3445 UA_NodeId dataType; \ 3446 UA_Int32 valueRank; \ 3447 size_t arrayDimensionsSize; \ 3448 UA_UInt32 *arrayDimensions; \ 3451 UA_ValueSource valueSource; \ 3454 UA_DataValue value; \ 3455 UA_ValueCallback callback; \ 3457 UA_DataSource dataSource; \ 3704 #define UA_MAXCONTINUATIONPOINTS 5 3717 #ifdef UA_ENABLE_SUBSCRIPTIONS 3718 typedef struct UA_PublishResponseEntry {
3722 } UA_PublishResponseEntry;
3738 #ifdef UA_ENABLE_SUBSCRIPTIONS 3741 SIMPLEQ_HEAD(UA_ListOfQueuedPublishResponses, UA_PublishResponseEntry) responseQueue;
3755 #ifdef UA_ENABLE_SUBSCRIPTIONS 3766 UA_Session_getUniqueSubscriptionID(
UA_Session *session);
3773 #define UA_LOG_TRACE_SESSION(LOGGER, SESSION, MSG, ...) \ 3774 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3775 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3776 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3777 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3780 #define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG, ...) \ 3781 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3782 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3783 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3784 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3787 #define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG, ...) \ 3788 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3789 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3790 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3791 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3794 #define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG, ...) \ 3795 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3796 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3797 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3798 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3801 #define UA_LOG_ERROR_SESSION(LOGGER, SESSION, MSG, ...) \ 3802 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3803 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3804 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3805 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3808 #define UA_LOG_FATAL_SESSION(LOGGER, SESSION, MSG, ...) \ 3809 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3810 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3811 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3812 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3907 UA_SubscriptionState
state;
3987 #define UA_NodeStore_newObjectNode() \ 3988 (UA_ObjectNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECT) 3989 #define UA_NodeStore_newMethodNode() \ 3990 (UA_MethodNode*)UA_NodeStore_newNode(UA_NODECLASS_METHOD) 3991 #define UA_NodeStore_newObjectTypeNode() \ 3992 (UA_ObjectTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECTTYPE) 3993 #define UA_NodeStore_newVariableTypeNode() \ 3994 (UA_VariableTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_VARIABLETYPE) 3995 #define UA_NodeStore_newReferenceTypeNode() \ 3996 (UA_ReferenceTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_REFERENCETYPE) 3997 #define UA_NodeStore_newDataTypeNode() \ 3998 (UA_DataTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_DATATYPE) 3999 #define UA_NodeStore_newViewNode() \ 4000 (UA_ViewNode*)UA_NodeStore_newNode(UA_NODECLASS_VIEW) 4005 UA_NodeStore_newVariableNode(
void) {
4155 #define ANONYMOUS_POLICY "open62541-anonymous-policy" 4156 #define USERNAME_POLICY "open62541-username-policy" 4163 #ifdef UA_ENABLE_MULTITHREADING 4164 # define _LGPL_SOURCE 4166 # include <urcu/lfstack.h> 4168 # define UA_RCU_LOCK() rcu_read_lock() 4169 # define UA_RCU_UNLOCK() rcu_read_unlock() 4170 # define UA_ASSERT_RCU_LOCKED() 4171 # define UA_ASSERT_RCU_UNLOCKED() 4174 # define UA_ASSERT_RCU_LOCKED() assert(rcu_locked) 4175 # define UA_ASSERT_RCU_UNLOCKED() assert(!rcu_locked) 4176 # define UA_RCU_LOCK() do { \ 4177 UA_ASSERT_RCU_UNLOCKED(); \ 4178 rcu_locked = true; \ 4179 rcu_read_lock(); } while(0) 4180 # define UA_RCU_UNLOCK() do { \ 4181 UA_ASSERT_RCU_LOCKED(); \ 4182 rcu_locked = false; \ 4183 rcu_read_unlock(); } while(0) 4186 # define UA_RCU_LOCK() 4187 # define UA_RCU_UNLOCK() 4188 # define UA_ASSERT_RCU_LOCKED() 4189 # define UA_ASSERT_RCU_UNLOCKED() 4193 #ifdef UA_ENABLE_MULTITHREADING 4199 char padding[64 -
sizeof(
void*) -
sizeof(pthread_t) -
4204 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 4229 #ifndef UA_ENABLE_MULTITHREADING 4233 struct cds_wfcq_head dispatchQueue_head;
4235 struct cds_lfs_stack mainLoopJobs;
4237 struct DelayedJobs *delayedJobs;
4238 pthread_cond_t dispatchQueue_condition;
4239 pthread_mutex_t dispatchQueue_mutex;
4240 struct cds_wfcq_tail dispatchQueue_tail;
4280 UA_InstantiationCallback *instantiationCallback,
4307 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize);
4313 size_t referenceTypeIdsSize);
4316 getNodeType(UA_Server *server,
const UA_Node *node);
4327 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
4337 const UA_UInt32 *constraintArrayDimensions,
4338 size_t testArrayDimensionsSize,
4404 const void *request,
void *response);
4458 UA_Session *session,
4559 void Service_Read(UA_Server *server, UA_Session *session,
4586 void Service_Call(UA_Server *server, UA_Session *session,
4686 #ifdef UA_ENABLE_SUBSCRIPTIONS 4688 typedef struct UA_Client_NotificationsAckNumber {
4689 LIST_ENTRY(UA_Client_NotificationsAckNumber) listEntry;
4691 } UA_Client_NotificationsAckNumber;
4693 typedef struct UA_Client_MonitoredItem {
4694 LIST_ENTRY(UA_Client_MonitoredItem) listEntry;
4704 void *handlerContext;
4705 } UA_Client_MonitoredItem;
4707 typedef struct UA_Client_Subscription {
4708 LIST_ENTRY(UA_Client_Subscription) listEntry;
4715 LIST_HEAD(UA_ListOfClientMonitoredItems, UA_Client_MonitoredItem) monitoredItems;
4716 } UA_Client_Subscription;
4718 void UA_Client_Subscriptions_forceDelete(
UA_Client *client, UA_Client_Subscription *sub);
4756 #ifdef UA_ENABLE_SUBSCRIPTIONS 4758 LIST_HEAD(ListOfUnacknowledgedNotifications, UA_Client_NotificationsAckNumber) pendingNotificationsAcks;
4759 LIST_HEAD(ListOfClientSubscriptionItems, UA_Client_Subscription) subscriptions;
4819 static void deleteMembers_noInit(
void *p,
const UA_DataType *type);
4825 size_t length = strlen(src);
4833 memcpy(str.
data, src, length);
4844 return (is == 0) ?
true :
false;
4862 time_t secSinceUnixEpoch =
4865 memset(&ts, 0,
sizeof(
struct tm));
4873 return dateTimeStruct;
4878 for(
size_t i = digits; i > 0; --i) {
4879 pos[i-1] = (
UA_Byte)((n % 10) +
'0');
4894 printNumber(tSt.
day, &str.
data[3], 2);
4896 printNumber(tSt.
year, &str.
data[6], 4);
4898 printNumber(tSt.
hour, &str.
data[11], 2);
4900 printNumber(tSt.
min, &str.
data[14], 2);
4902 printNumber(tSt.
sec, &str.
data[17], 2);
4915 if(memcmp(g1, g2,
sizeof(
UA_Guid)) == 0)
4943 UA_ByteString_init(bs);
5041 #define FNV_PRIME_32 16777619 5044 for(
size_t i = 0; i < size; ++i) {
5045 fnv = fnv ^ (buf[i]);
5068 NodeId_deleteMembers(&p->
nodeId, _);
5146 if(UA_Variant_isScalar(src))
5219 size_t *total,
size_t *block,
size_t *stride,
size_t *first) {
5221 #if(MAX_SIZE > 0xffffffff) 5230 size_t dims_count = 1;
5232 size_t elements = 1;
5235 for(
size_t i = 0; i < dims_count; ++i)
5236 elements *= dims[i];
5252 for(
size_t i = 0; i < dims_count; ++i) {
5261 realmax[i] = dims[i] - 1;
5272 size_t running_dimssize = 1;
5274 for(
size_t k = dims_count; k > 0;) {
5277 if(!found_contiguous && dimrange != dims[k]) {
5279 found_contiguous =
true;
5280 *block = running_dimssize * dimrange;
5281 *stride = running_dimssize * dims[k];
5284 running_dimssize *= dims[k];
5310 length = dim->
max - dim->
min + 1;
5325 UA_Boolean isScalar = UA_Variant_isScalar(src);
5357 size_t count, block, stride, first;
5358 UA_StatusCode retval = computeStrides(src, thisrange, &count,
5359 &block, &stride, &first);
5364 UA_Variant_init(dst);
5370 size_t block_count = count / block;
5372 uintptr_t nextdst = (uintptr_t)dst->
data;
5373 uintptr_t nextsrc = (uintptr_t)src->
data + (elem_size * first);
5377 for(
size_t i = 0; i < block_count; ++i) {
5378 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5379 nextdst += block * elem_size;
5380 nextsrc += stride * elem_size;
5383 for(
size_t i = 0; i < block_count; ++i) {
5384 for(
size_t j = 0; j < block; ++j) {
5385 retval =
UA_copy((
const void*)nextsrc,
5386 (
void*)nextdst, src->
type);
5387 nextdst += elem_size;
5388 nextsrc += elem_size;
5390 nextsrc += (stride - block) * elem_size;
5404 for(
size_t i = 0; i < block_count; ++i) {
5407 retval = copySubString((
const UA_String*)nextsrc,
5414 nextdst += elem_size;
5415 nextsrc += elem_size;
5417 nextsrc += (stride - block) * elem_size;
5439 Variant_deletemembers(dst,
NULL);
5453 Variant_setRange(
UA_Variant *v,
void *array,
size_t arraySize,
5456 size_t count, block, stride, first;
5458 &block, &stride, &first);
5461 if(count != arraySize)
5465 size_t block_count = count / block;
5467 uintptr_t nextdst = (uintptr_t)v->
data + (first * elem_size);
5468 uintptr_t nextsrc = (uintptr_t)array;
5470 for(
size_t i = 0; i < block_count; ++i) {
5471 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5472 nextsrc += block * elem_size;
5473 nextdst += stride * elem_size;
5476 for(
size_t i = 0; i < block_count; ++i) {
5477 for(
size_t j = 0; j < block; ++j) {
5478 deleteMembers_noInit((
void*)nextdst, v->
type);
5479 retval |=
UA_copy((
void*)nextsrc, (
void*)nextdst, v->
type);
5480 nextdst += elem_size;
5481 nextsrc += elem_size;
5483 nextdst += (stride - block) * elem_size;
5489 memset(array, 0,
sizeof(elem_size)*arraySize);
5497 return Variant_setRange(v, array, arraySize, range,
false);
5503 return Variant_setRange(v, (
void*)(uintptr_t)array,
5504 arraySize, range,
true);
5511 String_deleteMembers(&p->
text,
NULL);
5518 retval |= UA_String_copy(&src->
text, &dst->
text);
5532 UA_Variant_init(&dst->
value);
5535 DataValue_deleteMembers(dst,
NULL);
5645 copy_noInit(
const void *src,
void *dst,
const UA_DataType *type) {
5647 uintptr_t ptrs = (uintptr_t)src;
5648 uintptr_t ptrd = (uintptr_t)dst;
5650 for(
size_t i = 0; i < membersSize; ++i) {
5658 retval |= copyJumpTable[fi]((
const void*)ptrs, (
void*)ptrd, mt);
5664 size_t *dst_size = (
size_t*)ptrd;
5665 const size_t size = *((
const size_t*)ptrs);
5666 ptrs +=
sizeof(size_t);
5667 ptrd +=
sizeof(size_t);
5668 retval |=
UA_Array_copy(*(
void*
const*)ptrs, size, (
void**)ptrd, mt);
5673 ptrs +=
sizeof(
void*);
5674 ptrd +=
sizeof(
void*);
5682 memset(dst, 0, type->
memSize);
5689 static void nopDeleteMembers(
void *p,
const UA_DataType *type) { }
5724 deleteMembers_noInit(
void *p,
const UA_DataType *type) {
5725 uintptr_t ptr = (uintptr_t)p;
5727 for(
size_t i = 0; i < membersSize; ++i) {
5734 deleteMembersJumpTable[fi]((
void*)ptr, mt);
5738 size_t length = *(
size_t*)ptr;
5739 ptr +=
sizeof(size_t);
5741 ptr +=
sizeof(
void*);
5748 deleteMembers_noInit(p, type);
5754 deleteMembers_noInit(p, type);
5789 memcpy(*dst, src, type->
memSize * size);
5793 uintptr_t ptrs = (uintptr_t)src;
5794 uintptr_t ptrd = (uintptr_t)*dst;
5796 for(
size_t i = 0; i < size; ++i) {
5797 retval |=
UA_copy((
void*)ptrs, (
void*)ptrd, type);
5811 uintptr_t ptr = (uintptr_t)p;
5812 for(
size_t i = 0; i < size; ++i) {
5842 #if defined(__clang__) 5843 # pragma GCC diagnostic push 5844 # pragma GCC diagnostic warning "-W#warnings" 5847 #ifndef UA_BINARY_OVERLAYABLE_INTEGER 5848 # warning Integer endianness could not be detected to be little endian. Use slow generic encoding. 5853 #ifndef UA_BINARY_OVERLAYABLE_FLOAT 5854 # warning Float endianness could not be detected to be little endian in the IEEE 754 format. Use slow generic encoding. 5857 #if defined(__clang__) 5858 # pragma GCC diagnostic pop 5906 exchangeBuffer(
void) {
5907 if(!g_exchangeBufferCallback)
5912 void *store_exchangeBufferCallbackHandle = g_exchangeBufferCallbackHandle;
5914 size_t offset = (uintptr_t)(g_pos - g_buf.data);
5916 status ret = g_exchangeBufferCallback(g_exchangeBufferCallbackHandle, &buf, offset);
5919 g_exchangeBufferCallback = store_exchangeBufferCallback;
5920 g_exchangeBufferCallbackHandle = store_exchangeBufferCallbackHandle;
5931 #if !UA_BINARY_OVERLAYABLE_INTEGER 5935 UA_encode16(
const u16 v,
u8 buf[2]) {
5937 buf[1] = (
u8)(v >> 8);
5941 UA_decode16(
const u8 buf[2],
u16 *v) {
5942 *v = (
u16)((
u16)buf[0] + (((
u16)buf[1]) << 8));
5946 UA_encode32(
const u32 v,
u8 buf[4]) {
5948 buf[1] = (
u8)(v >> 8);
5949 buf[2] = (
u8)(v >> 16);
5950 buf[3] = (
u8)(v >> 24);
5954 UA_decode32(
const u8 buf[4],
u32 *v) {
5956 (((
u32)buf[1]) << 8) +
5957 (((
u32)buf[2]) << 16) +
5958 (((
u32)buf[3]) << 24));
5962 UA_encode64(
const u64 v,
u8 buf[8]) {
5964 buf[1] = (
u8)(v >> 8);
5965 buf[2] = (
u8)(v >> 16);
5966 buf[3] = (
u8)(v >> 24);
5967 buf[4] = (
u8)(v >> 32);
5968 buf[5] = (
u8)(v >> 40);
5969 buf[6] = (
u8)(v >> 48);
5970 buf[7] = (
u8)(v >> 56);
5974 UA_decode64(
const u8 buf[8],
u64 *v) {
5976 (((
u64)buf[1]) << 8) +
5977 (((
u64)buf[2]) << 16) +
5978 (((
u64)buf[3]) << 24) +
5979 (((
u64)buf[4]) << 32) +
5980 (((
u64)buf[5]) << 40) +
5981 (((
u64)buf[6]) << 48) +
5982 (((
u64)buf[7]) << 56));
5989 Boolean_encodeBinary(
const bool *src,
const UA_DataType *_) {
5990 if(g_pos +
sizeof(
bool) > g_end)
5992 *g_pos = *(
const u8*)src;
5998 Boolean_decodeBinary(
bool *dst,
const UA_DataType *_) {
5999 if(g_pos +
sizeof(
bool) > g_end)
6001 *dst = (*g_pos > 0) ?
true :
false;
6009 if(g_pos +
sizeof(
u8) > g_end)
6011 *g_pos = *(
const u8*)src;
6018 if(g_pos +
sizeof(
u8) > g_end)
6028 if(g_pos +
sizeof(
u16) > g_end)
6030 #if UA_BINARY_OVERLAYABLE_INTEGER 6031 memcpy(g_pos, src,
sizeof(
u16));
6033 UA_encode16(*src, g_pos);
6041 if(g_pos +
sizeof(
u16) > g_end)
6043 #if UA_BINARY_OVERLAYABLE_INTEGER 6044 memcpy(dst, g_pos,
sizeof(
u16));
6046 UA_decode16(g_pos, dst);
6055 if(g_pos +
sizeof(
u32) > g_end)
6057 #if UA_BINARY_OVERLAYABLE_INTEGER 6058 memcpy(g_pos, src,
sizeof(
u32));
6060 UA_encode32(*src, g_pos);
6067 Int32_encodeBinary(
i32 const *src) {
6068 return UInt32_encodeBinary((
const u32*)src,
NULL);
6073 if(g_pos +
sizeof(
u32) > g_end)
6075 #if UA_BINARY_OVERLAYABLE_INTEGER 6076 memcpy(dst, g_pos,
sizeof(
u32));
6078 UA_decode32(g_pos, dst);
6085 Int32_decodeBinary(
i32 *dst) {
6086 return UInt32_decodeBinary((
u32*)dst,
NULL);
6090 StatusCode_decodeBinary(
status *dst) {
6091 return UInt32_decodeBinary((
u32*)dst,
NULL);
6097 if(g_pos +
sizeof(
u64) > g_end)
6099 #if UA_BINARY_OVERLAYABLE_INTEGER 6100 memcpy(g_pos, src,
sizeof(
u64));
6102 UA_encode64(*src, g_pos);
6110 if(g_pos +
sizeof(
u64) > g_end)
6112 #if UA_BINARY_OVERLAYABLE_INTEGER 6113 memcpy(dst, g_pos,
sizeof(
u64));
6115 UA_decode64(g_pos, dst);
6123 return UInt64_decodeBinary((
u64*)dst,
NULL);
6130 #if UA_BINARY_OVERLAYABLE_FLOAT 6131 # define Float_encodeBinary UInt32_encodeBinary 6132 # define Float_decodeBinary UInt32_decodeBinary 6133 # define Double_encodeBinary UInt64_encodeBinary 6134 # define Double_decodeBinary UInt64_decodeBinary 6143 pack754(
long double f,
unsigned bits,
unsigned expbits) {
6144 unsigned significandbits = bits - expbits - 1;
6147 if (f < 0) { sign = 1; fnorm = -f; }
6148 else { sign = 0; fnorm = f; }
6150 while(fnorm >= 2.0) { fnorm /= 2.0; ++shift; }
6151 while(fnorm < 1.0) { fnorm *= 2.0; --shift; }
6152 fnorm = fnorm - 1.0;
6153 long long significand = (
long long)(fnorm * ((
float)(1LL<<significandbits) + 0.5f));
6154 long long exponent = shift + ((1<<(expbits-1)) - 1);
6155 return (uint64_t)((sign<<(bits-1)) | (exponent<<(bits-expbits-1)) | significand);
6159 unpack754(uint64_t i,
unsigned bits,
unsigned expbits) {
6160 unsigned significandbits = bits - expbits - 1;
6161 long double result = (
long double)(i&(uint64_t)((1LL<<significandbits)-1));
6162 result /= (1LL<<significandbits);
6164 unsigned bias = (unsigned)(1<<(expbits-1)) - 1;
6165 long long shift = (
long long)((i>>significandbits) & (uint64_t)((1LL<<expbits)-1)) - bias;
6166 while(shift > 0) { result *= 2.0; --shift; }
6167 while(shift < 0) { result /= 2.0; ++shift; }
6168 result *= ((i>>(bits-1))&1)? -1.0: 1.0;
6173 #define FLOAT_NAN 0xffc00000 6174 #define FLOAT_INF 0x7f800000 6175 #define FLOAT_NEG_INF 0xff800000 6176 #define FLOAT_NEG_ZERO 0x80000000 6187 else encoded = (
u32)pack754(f, 32, 8);
6188 return UInt32_encodeBinary(&encoded,
NULL);
6194 status ret = UInt32_decodeBinary(&decoded,
NULL);
6197 if(decoded == 0) *dst = 0.0f;
6199 else if(decoded ==
FLOAT_INF) *dst = INFINITY;
6201 else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) ||
6202 (decoded >= 0xff800001 && decoded <= 0xffffffff)) *dst = NAN;
6203 else *dst = (
UA_Float)unpack754(decoded, 32, 8);
6208 #define DOUBLE_NAN 0xfff8000000000000L 6209 #define DOUBLE_INF 0x7ff0000000000000L 6210 #define DOUBLE_NEG_INF 0xfff0000000000000L 6211 #define DOUBLE_NEG_ZERO 0x8000000000000000L 6222 else encoded = pack754(d, 64, 11);
6223 return UInt64_encodeBinary(&encoded,
NULL);
6229 status ret = UInt64_decodeBinary(&decoded,
NULL);
6232 if(decoded == 0) *dst = 0.0;
6234 else if(decoded ==
DOUBLE_INF) *dst = INFINITY;
6237 else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) ||
6238 (decoded >= 0xfff0000000000001L && decoded <= 0xffffffffffffffffL)) *dst = NAN;
6239 else *dst = (
UA_Double)unpack754(decoded, 64, 11);
6248 encodeNumericWithExchangeBuffer(
const void *ptr,
6252 ret = exchangeBuffer();
6255 encodeFunc(ptr,
NULL);
6263 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type);
6270 Array_encodeBinaryOverlayable(uintptr_t ptr,
size_t length,
size_t elementMemSize) {
6272 size_t finished = 0;
6275 while(g_end < g_pos + (elementMemSize * (length-finished))) {
6276 size_t possible = ((uintptr_t)g_end - (uintptr_t)g_pos) / (
sizeof(
u8) * elementMemSize);
6277 size_t possibleMem = possible * elementMemSize;
6278 memcpy(g_pos, (
void*)ptr, possibleMem);
6279 g_pos += possibleMem;
6281 finished += possible;
6282 status ret = exchangeBuffer();
6288 memcpy(g_pos, (
void*)ptr, elementMemSize * (length-finished));
6289 g_pos += elementMemSize * (length-finished);
6294 Array_encodeBinaryComplex(uintptr_t ptr,
size_t length,
const UA_DataType *type) {
6301 for(
size_t i = 0; i < length; ++i) {
6303 status ret = encodeType((
const void*)ptr, type);
6309 ret = exchangeBuffer();
6322 Array_encodeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
6324 i32 signed_length = -1;
6328 signed_length = (
i32)length;
6333 status ret = encodeNumericWithExchangeBuffer(&signed_length,
6342 return Array_encodeBinaryComplex((uintptr_t)src, length, type);
6343 return Array_encodeBinaryOverlayable((uintptr_t)src, length, type->
memSize);
6351 status ret = Int32_decodeBinary(&signed_length);
6356 if(signed_length <= 0) {
6358 if(signed_length < 0)
6368 size_t length = (size_t)signed_length;
6369 if(g_pos + ((type->
memSize * length) / 32) > g_end)
6379 if(g_end < g_pos + (type->
memSize * length)) {
6384 memcpy(*dst, g_pos, type->
memSize * length);
6385 g_pos += type->
memSize * length;
6388 uintptr_t ptr = (uintptr_t)*dst;
6390 for(
size_t i = 0; i < length; ++i) {
6391 ret = decodeBinaryJumpTable[decode_index]((
void*)ptr, type);
6401 *out_length = length;
6433 ret |= UInt16_encodeBinary(&src->
data2,
NULL);
6434 ret |= UInt16_encodeBinary(&src->
data3,
NULL);
6435 if(g_pos + (8*
sizeof(
u8)) > g_end)
6437 memcpy(g_pos, src->
data4, 8*
sizeof(
u8));
6445 ret |= UInt16_decodeBinary(&dst->
data2,
NULL);
6446 ret |= UInt16_decodeBinary(&dst->
data3,
NULL);
6447 if(g_pos + (8*
sizeof(
u8)) > g_end)
6449 memcpy(dst->
data4, g_pos, 8*
sizeof(
u8));
6455 #define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0 6456 #define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1 6457 #define UA_NODEIDTYPE_NUMERIC_COMPLETE 2 6459 #define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40 6460 #define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80 6466 NodeId_encodeBinaryWithEncodingMask(
UA_NodeId const *src,
u8 encoding) {
6472 ret |= Byte_encodeBinary(&encoding,
NULL);
6477 ret |= Byte_encodeBinary(&encoding,
NULL);
6479 ret |= Byte_encodeBinary(&nsindex,
NULL);
6481 ret |= UInt16_encodeBinary(&identifier16,
NULL);
6484 ret |= Byte_encodeBinary(&encoding,
NULL);
6486 ret |= Byte_encodeBinary(&identifier8,
NULL);
6491 ret |= Byte_encodeBinary(&encoding,
NULL);
6499 ret |= Byte_encodeBinary(&encoding,
NULL);
6505 ret |= Byte_encodeBinary(&encoding,
NULL);
6519 return NodeId_encodeBinaryWithEncodingMask(src, 0);
6524 u8 dstByte = 0, encodingByte = 0;
6528 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6537 switch (encodingByte) {
6540 ret = Byte_decodeBinary(&dstByte,
NULL);
6546 ret |= Byte_decodeBinary(&dstByte,
NULL);
6548 ret |= UInt16_decodeBinary(&dstUInt16,
NULL);
6589 status ret = NodeId_encodeBinaryWithEncodingMask(&src->
nodeId, encoding);
6604 ret = encodeNumericWithExchangeBuffer(&src->
serverIndex,
6615 u8 encoding = *g_pos;
6633 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01 6634 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02 6646 status ret = Byte_encodeBinary(&encoding,
NULL);
6652 ret |= String_encodeBinary(&src->
locale,
NULL);
6654 ret |= String_encodeBinary(&src->
text,
NULL);
6663 status ret = Byte_decodeBinary(&encoding,
NULL);
6667 ret |= String_decodeBinary(&dst->
locale,
NULL);
6669 ret |= String_decodeBinary(&dst->
text,
NULL);
6676 UA_findDataTypeByBinary(
const UA_NodeId *typeId) {
6701 ret = encodeNumericWithExchangeBuffer(&encoding,
6728 status ret = NodeId_encodeBinary(&typeId,
NULL);
6732 ret |= Byte_encodeBinary(&encoding,
NULL);
6741 i32 signed_len = (
i32)len;
6742 ret |= Int32_encodeBinary(&signed_len);
6755 const UA_DataType *type = UA_findDataTypeByBinary(typeId);
6776 return decodeBinaryJumpTable[decode_index](dst->
content.
decoded.data, type);
6787 UA_NodeId_init(&binTypeId);
6788 status ret = NodeId_decodeBinary(&binTypeId,
NULL);
6789 ret |= Byte_decodeBinary(&encoding,
NULL);
6791 UA_NodeId_deleteMembers(&binTypeId);
6796 ret = ExtensionObject_decodeBinaryContent(dst, &binTypeId);
6797 UA_NodeId_deleteMembers(&binTypeId);
6809 UA_NodeId_deleteMembers(&binTypeId);
6820 Variant_encodeBinaryWrapExtensionObject(
const UA_Variant *src,
const bool isArray) {
6831 ret = Int32_encodeBinary(&encodedLength);
6838 UA_ExtensionObject_init(&eo);
6842 uintptr_t ptr = (uintptr_t)src->
data;
6864 return Byte_encodeBinary(&encoding,
NULL);
6883 status ret = Byte_encodeBinary(&encoding,
NULL);
6889 ret = Variant_encodeBinaryWrapExtensionObject(src, isArray);
6891 ret = UA_encodeBinaryInternal(src->
data, src->
type);
6903 Variant_decodeBinaryUnwrapExtensionObject(
UA_Variant *dst) {
6906 u8 *old_pos = g_pos;
6910 UA_NodeId_init(&typeId);
6911 status ret = NodeId_decodeBinary(&typeId,
NULL);
6917 ret = Byte_decodeBinary(&encoding,
NULL);
6919 UA_NodeId_deleteMembers(&typeId);
6925 (dst->
type = UA_findDataTypeByBinary(&typeId)) !=
NULL) {
6932 UA_NodeId_deleteMembers(&typeId);
6942 return decodeBinaryJumpTable[decode_index](dst->
data, dst->
type);
6950 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6955 if(encodingByte == 0)
6977 ret = decodeBinaryJumpTable[typeIndex](dst->
data, dst->
type);
6979 ret = Variant_decodeBinaryUnwrapExtensionObject(dst);
6993 u8 encodingMask = (
u8)
7002 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7010 ret = Variant_encodeBinary(&src->
value,
NULL);
7016 ret |= encodeNumericWithExchangeBuffer(&src->
status,
7034 #define MAX_PICO_SECONDS 9999 7040 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7045 if(encodingMask & 0x01) {
7047 ret |= Variant_decodeBinary(&dst->
value,
NULL);
7049 if(encodingMask & 0x02) {
7051 ret |= StatusCode_decodeBinary(&dst->
status);
7053 if(encodingMask & 0x04) {
7057 if(encodingMask & 0x10) {
7063 if(encodingMask & 0x08) {
7067 if(encodingMask & 0x20) {
7080 u8 encodingMask = (
u8)
7086 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7094 ret |= Int32_encodeBinary(&src->
locale);
7130 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7135 if(encodingMask & 0x01) {
7139 if(encodingMask & 0x02) {
7143 if(encodingMask & 0x04) {
7147 if(encodingMask & 0x08) {
7149 ret |= Int32_decodeBinary(&dst->
locale);
7151 if(encodingMask & 0x10) {
7155 if(encodingMask & 0x20) {
7159 if(encodingMask & 0x40) {
7176 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type);
7208 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type) {
7209 uintptr_t ptr = (uintptr_t)src;
7219 size_t memSize = membertype->
memSize;
7221 ret = encodeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7225 ret = exchangeBuffer();
7226 ptr -= member->
padding + memSize;
7235 const size_t length = *((
const size_t*)ptr);
7236 ptr +=
sizeof(size_t);
7237 ret = Array_encodeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7238 ptr +=
sizeof(
void*);
7251 g_pos = &dst->
data[*offset];
7253 g_exchangeBufferCallback = exchangeCallback;
7254 g_exchangeBufferCallbackHandle = exchangeHandle;
7255 status ret = UA_encodeBinaryInternal(src, type);
7260 *offset = (uintptr_t)(g_pos - g_buf.data);
7294 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type) {
7295 uintptr_t ptr = (uintptr_t)dst;
7305 size_t memSize = membertype->
memSize;
7306 ret |= decodeBinaryJumpTable[fi]((
void *
UA_RESTRICT)ptr, membertype);
7310 size_t *length = (
size_t*)ptr;
7311 ptr +=
sizeof(size_t);
7313 ptr +=
sizeof(
void*);
7323 memset(dst, 0, type->
memSize);
7327 g_pos = &src->
data[*offset];
7331 status ret = UA_decodeBinaryInternal(dst, type);
7335 *offset = (size_t)(g_pos - src->
data) /
sizeof(
u8);
7346 Array_calcSizeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
7352 uintptr_t ptr = (uintptr_t)src;
7354 for(
size_t i = 0; i < length; ++i) {
7355 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, type);
7368 return 4 + p->length;
7379 switch (src->identifierType) {
7383 }
else if(src->identifier.numeric >
UA_BYTE_MAX || src->namespaceIndex > 0) {
7392 s += String_calcSizeBinary(&src->identifier.string,
NULL);
7405 size_t s = NodeId_calcSizeBinary(&src->
nodeId,
NULL);
7417 s += String_calcSizeBinary(&src->
locale,
NULL);
7419 s += String_calcSizeBinary(&src->
text,
NULL);
7435 s += calcSizeBinaryJumpTable[encode_index](src->
content.
decoded.data, type);
7463 UA_NodeId_init(&typeId);
7478 uintptr_t ptr = (uintptr_t)src->
data;
7480 for(
size_t i = 0; i < length; ++i) {
7483 s += NodeId_calcSizeBinary(&typeId,
NULL);
7486 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, src->
type);
7500 s += Variant_calcSizeBinary(&src->
value,
NULL);
7566 uintptr_t ptr = (uintptr_t)p;
7569 for(
size_t i = 0; i < membersSize; ++i) {
7575 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7579 const size_t length = *((
const size_t*)ptr);
7580 ptr +=
sizeof(size_t);
7581 s += Array_calcSizeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7582 ptr +=
sizeof(
void*);
7597 #ifdef UA_ENABLE_TYPENAMES 7600 .namespaceZero =
true,
7608 #ifdef UA_ENABLE_TYPENAMES 7611 .namespaceZero =
true,
7619 #ifdef UA_ENABLE_TYPENAMES 7622 .namespaceZero =
true,
7630 #ifdef UA_ENABLE_TYPENAMES 7633 .namespaceZero =
true,
7641 #ifdef UA_ENABLE_TYPENAMES 7644 .namespaceZero =
true,
7652 #ifdef UA_ENABLE_TYPENAMES 7655 .namespaceZero =
true,
7663 #ifdef UA_ENABLE_TYPENAMES 7666 .namespaceZero =
true,
7674 #ifdef UA_ENABLE_TYPENAMES 7677 .namespaceZero =
true,
7685 #ifdef UA_ENABLE_TYPENAMES 7688 .namespaceZero =
true,
7696 #ifdef UA_ENABLE_TYPENAMES 7699 .namespaceZero =
true,
7707 #ifdef UA_ENABLE_TYPENAMES 7710 .namespaceZero =
true,
7718 #ifdef UA_ENABLE_TYPENAMES 7721 .namespaceZero =
true,
7729 #ifdef UA_ENABLE_TYPENAMES 7732 .namespaceZero =
true,
7740 #ifdef UA_ENABLE_TYPENAMES 7743 .namespaceZero =
true,
7751 #ifdef UA_ENABLE_TYPENAMES 7754 .namespaceZero =
true,
7762 #ifdef UA_ENABLE_TYPENAMES 7765 .namespaceZero =
true,
7773 #ifdef UA_ENABLE_TYPENAMES 7776 .namespaceZero =
true,
7784 #ifdef UA_ENABLE_TYPENAMES 7787 .namespaceZero =
true,
7795 #ifdef UA_ENABLE_TYPENAMES 7798 .namespaceZero =
true,
7806 #ifdef UA_ENABLE_TYPENAMES 7807 .memberName =
"namespaceIndex",
7809 .namespaceZero =
true,
7814 #ifdef UA_ENABLE_TYPENAMES 7815 .memberName =
"name",
7817 .namespaceZero =
true,
7825 #ifdef UA_ENABLE_TYPENAMES 7828 .namespaceZero =
true,
7836 #ifdef UA_ENABLE_TYPENAMES 7839 .namespaceZero =
true,
7847 #ifdef UA_ENABLE_TYPENAMES 7850 .namespaceZero =
true,
7858 #ifdef UA_ENABLE_TYPENAMES 7861 .namespaceZero =
true,
7869 #ifdef UA_ENABLE_TYPENAMES 7872 .namespaceZero =
true,
7880 #ifdef UA_ENABLE_TYPENAMES 7881 .memberName =
"certificateData",
7883 .namespaceZero =
true,
7888 #ifdef UA_ENABLE_TYPENAMES 7889 .memberName =
"signature",
7891 .namespaceZero =
true,
7899 #ifdef UA_ENABLE_TYPENAMES 7900 .memberName =
"targetId",
7902 .namespaceZero =
true,
7907 #ifdef UA_ENABLE_TYPENAMES 7908 .memberName =
"remainingPathIndex",
7910 .namespaceZero =
true,
7918 #ifdef UA_ENABLE_TYPENAMES 7919 .memberName =
"specifiedAttributes",
7921 .namespaceZero =
true,
7926 #ifdef UA_ENABLE_TYPENAMES 7927 .memberName =
"displayName",
7929 .namespaceZero =
true,
7934 #ifdef UA_ENABLE_TYPENAMES 7935 .memberName =
"description",
7937 .namespaceZero =
true,
7942 #ifdef UA_ENABLE_TYPENAMES 7943 .memberName =
"writeMask",
7945 .namespaceZero =
true,
7950 #ifdef UA_ENABLE_TYPENAMES 7951 .memberName =
"userWriteMask",
7953 .namespaceZero =
true,
7958 #ifdef UA_ENABLE_TYPENAMES 7959 .memberName =
"containsNoLoops",
7961 .namespaceZero =
true,
7966 #ifdef UA_ENABLE_TYPENAMES 7967 .memberName =
"eventNotifier",
7969 .namespaceZero =
true,
7977 #ifdef UA_ENABLE_TYPENAMES 7980 .namespaceZero =
true,
7988 #ifdef UA_ENABLE_TYPENAMES 7989 .memberName =
"authenticationToken",
7991 .namespaceZero =
true,
7996 #ifdef UA_ENABLE_TYPENAMES 7997 .memberName =
"timestamp",
7999 .namespaceZero =
true,
8004 #ifdef UA_ENABLE_TYPENAMES 8005 .memberName =
"requestHandle",
8007 .namespaceZero =
true,
8012 #ifdef UA_ENABLE_TYPENAMES 8013 .memberName =
"returnDiagnostics",
8015 .namespaceZero =
true,
8020 #ifdef UA_ENABLE_TYPENAMES 8021 .memberName =
"auditEntryId",
8023 .namespaceZero =
true,
8028 #ifdef UA_ENABLE_TYPENAMES 8029 .memberName =
"timeoutHint",
8031 .namespaceZero =
true,
8036 #ifdef UA_ENABLE_TYPENAMES 8037 .memberName =
"additionalHeader",
8039 .namespaceZero =
true,
8047 #ifdef UA_ENABLE_TYPENAMES 8048 .memberName =
"statusCode",
8050 .namespaceZero =
true,
8055 #ifdef UA_ENABLE_TYPENAMES 8056 .memberName =
"revisedSamplingInterval",
8058 .namespaceZero =
true,
8063 #ifdef UA_ENABLE_TYPENAMES 8064 .memberName =
"revisedQueueSize",
8066 .namespaceZero =
true,
8071 #ifdef UA_ENABLE_TYPENAMES 8072 .memberName =
"filterResult",
8074 .namespaceZero =
true,
8082 #ifdef UA_ENABLE_TYPENAMES 8083 .memberName =
"requestHeader",
8085 .namespaceZero =
true,
8093 #ifdef UA_ENABLE_TYPENAMES 8094 .memberName =
"statusCode",
8096 .namespaceZero =
true,
8101 #ifdef UA_ENABLE_TYPENAMES 8102 .memberName =
"addedNodeId",
8104 .namespaceZero =
true,
8112 #ifdef UA_ENABLE_TYPENAMES 8113 .memberName =
"specifiedAttributes",
8115 .namespaceZero =
true,
8120 #ifdef UA_ENABLE_TYPENAMES 8121 .memberName =
"displayName",
8123 .namespaceZero =
true,
8128 #ifdef UA_ENABLE_TYPENAMES 8129 .memberName =
"description",
8131 .namespaceZero =
true,
8136 #ifdef UA_ENABLE_TYPENAMES 8137 .memberName =
"writeMask",
8139 .namespaceZero =
true,
8144 #ifdef UA_ENABLE_TYPENAMES 8145 .memberName =
"userWriteMask",
8147 .namespaceZero =
true,
8152 #ifdef UA_ENABLE_TYPENAMES 8153 .memberName =
"value",
8155 .namespaceZero =
true,
8160 #ifdef UA_ENABLE_TYPENAMES 8161 .memberName =
"dataType",
8163 .namespaceZero =
true,
8168 #ifdef UA_ENABLE_TYPENAMES 8169 .memberName =
"valueRank",
8171 .namespaceZero =
true,
8176 #ifdef UA_ENABLE_TYPENAMES 8177 .memberName =
"arrayDimensions",
8179 .namespaceZero =
true,
8184 #ifdef UA_ENABLE_TYPENAMES 8185 .memberName =
"accessLevel",
8187 .namespaceZero =
true,
8192 #ifdef UA_ENABLE_TYPENAMES 8193 .memberName =
"userAccessLevel",
8195 .namespaceZero =
true,
8200 #ifdef UA_ENABLE_TYPENAMES 8201 .memberName =
"minimumSamplingInterval",
8203 .namespaceZero =
true,
8208 #ifdef UA_ENABLE_TYPENAMES 8209 .memberName =
"historizing",
8211 .namespaceZero =
true,
8219 #ifdef UA_ENABLE_TYPENAMES 8220 .memberName =
"sequenceNumber",
8222 .namespaceZero =
true,
8227 #ifdef UA_ENABLE_TYPENAMES 8228 .memberName =
"publishTime",
8230 .namespaceZero =
true,
8235 #ifdef UA_ENABLE_TYPENAMES 8236 .memberName =
"notificationData",
8238 .namespaceZero =
true,
8246 #ifdef UA_ENABLE_TYPENAMES 8249 .namespaceZero =
true,
8257 #ifdef UA_ENABLE_TYPENAMES 8260 .namespaceZero =
true,
8268 #ifdef UA_ENABLE_TYPENAMES 8269 .memberName =
"statusCode",
8271 .namespaceZero =
true,
8276 #ifdef UA_ENABLE_TYPENAMES 8277 .memberName =
"inputArgumentResults",
8279 .namespaceZero =
true,
8284 #ifdef UA_ENABLE_TYPENAMES 8285 .memberName =
"inputArgumentDiagnosticInfos",
8287 .namespaceZero =
true,
8292 #ifdef UA_ENABLE_TYPENAMES 8293 .memberName =
"outputArguments",
8295 .namespaceZero =
true,
8303 #ifdef UA_ENABLE_TYPENAMES 8304 .memberName =
"statusCode",
8306 .namespaceZero =
true,
8311 #ifdef UA_ENABLE_TYPENAMES 8312 .memberName =
"dataStatusCodes",
8314 .namespaceZero =
true,
8319 #ifdef UA_ENABLE_TYPENAMES 8320 .memberName =
"dataDiagnosticInfos",
8322 .namespaceZero =
true,
8330 #ifdef UA_ENABLE_TYPENAMES 8331 .memberName =
"referenceTypeId",
8333 .namespaceZero =
true,
8338 #ifdef UA_ENABLE_TYPENAMES 8339 .memberName =
"isInverse",
8341 .namespaceZero =
true,
8346 #ifdef UA_ENABLE_TYPENAMES 8347 .memberName =
"includeSubtypes",
8349 .namespaceZero =
true,
8354 #ifdef UA_ENABLE_TYPENAMES 8355 .memberName =
"targetName",
8357 .namespaceZero =
true,
8365 #ifdef UA_ENABLE_TYPENAMES 8368 .namespaceZero =
true,
8376 #ifdef UA_ENABLE_TYPENAMES 8377 .memberName =
"objectId",
8379 .namespaceZero =
true,
8384 #ifdef UA_ENABLE_TYPENAMES 8385 .memberName =
"methodId",
8387 .namespaceZero =
true,
8392 #ifdef UA_ENABLE_TYPENAMES 8393 .memberName =
"inputArguments",
8395 .namespaceZero =
true,
8403 #ifdef UA_ENABLE_TYPENAMES 8404 .memberName =
"requestHeader",
8406 .namespaceZero =
true,
8411 #ifdef UA_ENABLE_TYPENAMES 8412 .memberName =
"nodesToUnregister",
8414 .namespaceZero =
true,
8422 #ifdef UA_ENABLE_TYPENAMES 8423 .memberName =
"statusCode",
8425 .namespaceZero =
true,
8430 #ifdef UA_ENABLE_TYPENAMES 8431 .memberName =
"operandStatusCodes",
8433 .namespaceZero =
true,
8438 #ifdef UA_ENABLE_TYPENAMES 8439 .memberName =
"operandDiagnosticInfos",
8441 .namespaceZero =
true,
8449 #ifdef UA_ENABLE_TYPENAMES 8450 .memberName =
"nodeId",
8452 .namespaceZero =
true,
8457 #ifdef UA_ENABLE_TYPENAMES 8458 .memberName =
"typeDefinitionNode",
8460 .namespaceZero =
true,
8465 #ifdef UA_ENABLE_TYPENAMES 8466 .memberName =
"values",
8468 .namespaceZero =
true,
8476 #ifdef UA_ENABLE_TYPENAMES 8477 .memberName =
"policyId",
8479 .namespaceZero =
true,
8487 #ifdef UA_ENABLE_TYPENAMES 8488 .memberName =
"requestHeader",
8490 .namespaceZero =
true,
8495 #ifdef UA_ENABLE_TYPENAMES 8496 .memberName =
"publishingEnabled",
8498 .namespaceZero =
true,
8503 #ifdef UA_ENABLE_TYPENAMES 8504 .memberName =
"subscriptionIds",
8506 .namespaceZero =
true,
8514 #ifdef UA_ENABLE_TYPENAMES 8517 .namespaceZero =
true,
8525 #ifdef UA_ENABLE_TYPENAMES 8526 .memberName =
"requestHeader",
8528 .namespaceZero =
true,
8533 #ifdef UA_ENABLE_TYPENAMES 8534 .memberName =
"methodsToCall",
8536 .namespaceZero =
true,
8544 #ifdef UA_ENABLE_TYPENAMES 8545 .memberName =
"specifiedAttributes",
8547 .namespaceZero =
true,
8552 #ifdef UA_ENABLE_TYPENAMES 8553 .memberName =
"displayName",
8555 .namespaceZero =
true,
8560 #ifdef UA_ENABLE_TYPENAMES 8561 .memberName =
"description",
8563 .namespaceZero =
true,
8568 #ifdef UA_ENABLE_TYPENAMES 8569 .memberName =
"writeMask",
8571 .namespaceZero =
true,
8576 #ifdef UA_ENABLE_TYPENAMES 8577 .memberName =
"userWriteMask",
8579 .namespaceZero =
true,
8584 #ifdef UA_ENABLE_TYPENAMES 8585 .memberName =
"executable",
8587 .namespaceZero =
true,
8592 #ifdef UA_ENABLE_TYPENAMES 8593 .memberName =
"userExecutable",
8595 .namespaceZero =
true,
8603 #ifdef UA_ENABLE_TYPENAMES 8604 .memberName =
"sourceNodeId",
8606 .namespaceZero =
true,
8611 #ifdef UA_ENABLE_TYPENAMES 8612 .memberName =
"referenceTypeId",
8614 .namespaceZero =
true,
8619 #ifdef UA_ENABLE_TYPENAMES 8620 .memberName =
"isForward",
8622 .namespaceZero =
true,
8627 #ifdef UA_ENABLE_TYPENAMES 8628 .memberName =
"targetNodeId",
8630 .namespaceZero =
true,
8635 #ifdef UA_ENABLE_TYPENAMES 8636 .memberName =
"deleteBidirectional",
8638 .namespaceZero =
true,
8646 #ifdef UA_ENABLE_TYPENAMES 8647 .memberName =
"nodeId",
8649 .namespaceZero =
true,
8654 #ifdef UA_ENABLE_TYPENAMES 8655 .memberName =
"attributeId",
8657 .namespaceZero =
true,
8662 #ifdef UA_ENABLE_TYPENAMES 8663 .memberName =
"indexRange",
8665 .namespaceZero =
true,
8670 #ifdef UA_ENABLE_TYPENAMES 8671 .memberName =
"value",
8673 .namespaceZero =
true,
8681 #ifdef UA_ENABLE_TYPENAMES 8682 .memberName =
"statusCode",
8684 .namespaceZero =
true,
8689 #ifdef UA_ENABLE_TYPENAMES 8690 .memberName =
"monitoredItemId",
8692 .namespaceZero =
true,
8697 #ifdef UA_ENABLE_TYPENAMES 8698 .memberName =
"revisedSamplingInterval",
8700 .namespaceZero =
true,
8705 #ifdef UA_ENABLE_TYPENAMES 8706 .memberName =
"revisedQueueSize",
8708 .namespaceZero =
true,
8713 #ifdef UA_ENABLE_TYPENAMES 8714 .memberName =
"filterResult",
8716 .namespaceZero =
true,
8724 #ifdef UA_ENABLE_TYPENAMES 8727 .namespaceZero =
true,
8735 #ifdef UA_ENABLE_TYPENAMES 8736 .memberName =
"clientHandle",
8738 .namespaceZero =
true,
8743 #ifdef UA_ENABLE_TYPENAMES 8744 .memberName =
"samplingInterval",
8746 .namespaceZero =
true,
8751 #ifdef UA_ENABLE_TYPENAMES 8752 .memberName =
"filter",
8754 .namespaceZero =
true,
8759 #ifdef UA_ENABLE_TYPENAMES 8760 .memberName =
"queueSize",
8762 .namespaceZero =
true,
8767 #ifdef UA_ENABLE_TYPENAMES 8768 .memberName =
"discardOldest",
8770 .namespaceZero =
true,
8778 #ifdef UA_ENABLE_TYPENAMES 8779 .memberName =
"algorithm",
8781 .namespaceZero =
true,
8786 #ifdef UA_ENABLE_TYPENAMES 8787 .memberName =
"signature",
8789 .namespaceZero =
true,
8797 #ifdef UA_ENABLE_TYPENAMES 8798 .memberName =
"referenceTypeId",
8800 .namespaceZero =
true,
8805 #ifdef UA_ENABLE_TYPENAMES 8806 .memberName =
"isInverse",
8808 .namespaceZero =
true,
8813 #ifdef UA_ENABLE_TYPENAMES 8814 .memberName =
"targetId",
8816 .namespaceZero =
true,
8824 #ifdef UA_ENABLE_TYPENAMES 8825 .memberName =
"name",
8827 .namespaceZero =
true,
8832 #ifdef UA_ENABLE_TYPENAMES 8833 .memberName =
"dataType",
8835 .namespaceZero =
true,
8840 #ifdef UA_ENABLE_TYPENAMES 8841 .memberName =
"valueRank",
8843 .namespaceZero =
true,
8848 #ifdef UA_ENABLE_TYPENAMES 8849 .memberName =
"arrayDimensions",
8851 .namespaceZero =
true,
8856 #ifdef UA_ENABLE_TYPENAMES 8857 .memberName =
"description",
8859 .namespaceZero =
true,
8867 #ifdef UA_ENABLE_TYPENAMES 8868 .memberName =
"policyId",
8870 .namespaceZero =
true,
8878 #ifdef UA_ENABLE_TYPENAMES 8879 .memberName =
"specifiedAttributes",
8881 .namespaceZero =
true,
8886 #ifdef UA_ENABLE_TYPENAMES 8887 .memberName =
"displayName",
8889 .namespaceZero =
true,
8894 #ifdef UA_ENABLE_TYPENAMES 8895 .memberName =
"description",
8897 .namespaceZero =
true,
8902 #ifdef UA_ENABLE_TYPENAMES 8903 .memberName =
"writeMask",
8905 .namespaceZero =
true,
8910 #ifdef UA_ENABLE_TYPENAMES 8911 .memberName =
"userWriteMask",
8913 .namespaceZero =
true,
8918 #ifdef UA_ENABLE_TYPENAMES 8919 .memberName =
"isAbstract",
8921 .namespaceZero =
true,
8929 #ifdef UA_ENABLE_TYPENAMES 8932 .namespaceZero =
true,
8940 #ifdef UA_ENABLE_TYPENAMES 8943 .namespaceZero =
true,
8951 #ifdef UA_ENABLE_TYPENAMES 8954 .namespaceZero =
true,
8962 #ifdef UA_ENABLE_TYPENAMES 8963 .memberName =
"productUri",
8965 .namespaceZero =
true,
8970 #ifdef UA_ENABLE_TYPENAMES 8971 .memberName =
"manufacturerName",
8973 .namespaceZero =
true,
8978 #ifdef UA_ENABLE_TYPENAMES 8979 .memberName =
"productName",
8981 .namespaceZero =
true,
8986 #ifdef UA_ENABLE_TYPENAMES 8987 .memberName =
"softwareVersion",
8989 .namespaceZero =
true,
8994 #ifdef UA_ENABLE_TYPENAMES 8995 .memberName =
"buildNumber",
8997 .namespaceZero =
true,
9002 #ifdef UA_ENABLE_TYPENAMES 9003 .memberName =
"buildDate",
9005 .namespaceZero =
true,
9013 #ifdef UA_ENABLE_TYPENAMES 9016 .namespaceZero =
true,
9024 #ifdef UA_ENABLE_TYPENAMES 9025 .memberName =
"channelId",
9027 .namespaceZero =
true,
9032 #ifdef UA_ENABLE_TYPENAMES 9033 .memberName =
"tokenId",
9035 .namespaceZero =
true,
9040 #ifdef UA_ENABLE_TYPENAMES 9041 .memberName =
"createdAt",
9043 .namespaceZero =
true,
9048 #ifdef UA_ENABLE_TYPENAMES 9049 .memberName =
"revisedLifetime",
9051 .namespaceZero =
true,
9059 #ifdef UA_ENABLE_TYPENAMES 9060 .memberName =
"clientHandle",
9062 .namespaceZero =
true,
9067 #ifdef UA_ENABLE_TYPENAMES 9068 .memberName =
"value",
9070 .namespaceZero =
true,
9078 #ifdef UA_ENABLE_TYPENAMES 9079 .memberName =
"nodeId",
9081 .namespaceZero =
true,
9086 #ifdef UA_ENABLE_TYPENAMES 9087 .memberName =
"deleteTargetReferences",
9089 .namespaceZero =
true,
9097 #ifdef UA_ENABLE_TYPENAMES 9098 .memberName =
"subscriptionId",
9100 .namespaceZero =
true,
9105 #ifdef UA_ENABLE_TYPENAMES 9106 .memberName =
"sequenceNumber",
9108 .namespaceZero =
true,
9116 #ifdef UA_ENABLE_TYPENAMES 9117 .memberName =
"nodeId",
9119 .namespaceZero =
true,
9124 #ifdef UA_ENABLE_TYPENAMES 9125 .memberName =
"attributeId",
9127 .namespaceZero =
true,
9132 #ifdef UA_ENABLE_TYPENAMES 9133 .memberName =
"indexRange",
9135 .namespaceZero =
true,
9140 #ifdef UA_ENABLE_TYPENAMES 9141 .memberName =
"dataEncoding",
9143 .namespaceZero =
true,
9151 #ifdef UA_ENABLE_TYPENAMES 9152 .memberName =
"specifiedAttributes",
9154 .namespaceZero =
true,
9159 #ifdef UA_ENABLE_TYPENAMES 9160 .memberName =
"displayName",
9162 .namespaceZero =
true,
9167 #ifdef UA_ENABLE_TYPENAMES 9168 .memberName =
"description",
9170 .namespaceZero =
true,
9175 #ifdef UA_ENABLE_TYPENAMES 9176 .memberName =
"writeMask",
9178 .namespaceZero =
true,
9183 #ifdef UA_ENABLE_TYPENAMES 9184 .memberName =
"userWriteMask",
9186 .namespaceZero =
true,
9191 #ifdef UA_ENABLE_TYPENAMES 9192 .memberName =
"isAbstract",
9194 .namespaceZero =
true,
9202 #ifdef UA_ENABLE_TYPENAMES 9203 .memberName =
"timestamp",
9205 .namespaceZero =
true,
9210 #ifdef UA_ENABLE_TYPENAMES 9211 .memberName =
"requestHandle",
9213 .namespaceZero =
true,
9218 #ifdef UA_ENABLE_TYPENAMES 9219 .memberName =
"serviceResult",
9221 .namespaceZero =
true,
9226 #ifdef UA_ENABLE_TYPENAMES 9227 .memberName =
"serviceDiagnostics",
9229 .namespaceZero =
true,
9234 #ifdef UA_ENABLE_TYPENAMES 9235 .memberName =
"stringTable",
9237 .namespaceZero =
true,
9242 #ifdef UA_ENABLE_TYPENAMES 9243 .memberName =
"additionalHeader",
9245 .namespaceZero =
true,
9253 #ifdef UA_ENABLE_TYPENAMES 9254 .memberName =
"requestHeader",
9256 .namespaceZero =
true,
9261 #ifdef UA_ENABLE_TYPENAMES 9262 .memberName =
"subscriptionIds",
9264 .namespaceZero =
true,
9272 #ifdef UA_ENABLE_TYPENAMES 9273 .memberName =
"viewId",
9275 .namespaceZero =
true,
9280 #ifdef UA_ENABLE_TYPENAMES 9281 .memberName =
"timestamp",
9283 .namespaceZero =
true,
9288 #ifdef UA_ENABLE_TYPENAMES 9289 .memberName =
"viewVersion",
9291 .namespaceZero =
true,
9299 #ifdef UA_ENABLE_TYPENAMES 9300 .memberName =
"responseHeader",
9302 .namespaceZero =
true,
9307 #ifdef UA_ENABLE_TYPENAMES 9308 .memberName =
"results",
9310 .namespaceZero =
true,
9315 #ifdef UA_ENABLE_TYPENAMES 9316 .memberName =
"diagnosticInfos",
9318 .namespaceZero =
true,
9326 #ifdef UA_ENABLE_TYPENAMES 9327 .memberName =
"specifiedAttributes",
9329 .namespaceZero =
true,
9334 #ifdef UA_ENABLE_TYPENAMES 9335 .memberName =
"displayName",
9337 .namespaceZero =
true,
9342 #ifdef UA_ENABLE_TYPENAMES 9343 .memberName =
"description",
9345 .namespaceZero =
true,
9350 #ifdef UA_ENABLE_TYPENAMES 9351 .memberName =
"writeMask",
9353 .namespaceZero =
true,
9358 #ifdef UA_ENABLE_TYPENAMES 9359 .memberName =
"userWriteMask",
9361 .namespaceZero =
true,
9369 #ifdef UA_ENABLE_TYPENAMES 9370 .memberName =
"requestHeader",
9372 .namespaceZero =
true,
9377 #ifdef UA_ENABLE_TYPENAMES 9378 .memberName =
"nodesToRegister",
9380 .namespaceZero =
true,
9388 #ifdef UA_ENABLE_TYPENAMES 9389 .memberName =
"requestHeader",
9391 .namespaceZero =
true,
9396 #ifdef UA_ENABLE_TYPENAMES 9397 .memberName =
"nodesToDelete",
9399 .namespaceZero =
true,
9407 #ifdef UA_ENABLE_TYPENAMES 9408 .memberName =
"responseHeader",
9410 .namespaceZero =
true,
9415 #ifdef UA_ENABLE_TYPENAMES 9416 .memberName =
"subscriptionId",
9418 .namespaceZero =
true,
9423 #ifdef UA_ENABLE_TYPENAMES 9424 .memberName =
"availableSequenceNumbers",
9426 .namespaceZero =
true,
9431 #ifdef UA_ENABLE_TYPENAMES 9432 .memberName =
"moreNotifications",
9434 .namespaceZero =
true,
9439 #ifdef UA_ENABLE_TYPENAMES 9440 .memberName =
"notificationMessage",
9442 .namespaceZero =
true,
9447 #ifdef UA_ENABLE_TYPENAMES 9448 .memberName =
"results",
9450 .namespaceZero =
true,
9455 #ifdef UA_ENABLE_TYPENAMES 9456 .memberName =
"diagnosticInfos",
9458 .namespaceZero =
true,
9466 #ifdef UA_ENABLE_TYPENAMES 9467 .memberName =
"monitoredItemId",
9469 .namespaceZero =
true,
9474 #ifdef UA_ENABLE_TYPENAMES 9475 .memberName =
"requestedParameters",
9477 .namespaceZero =
true,
9485 #ifdef UA_ENABLE_TYPENAMES 9486 .memberName =
"policyId",
9488 .namespaceZero =
true,
9493 #ifdef UA_ENABLE_TYPENAMES 9494 .memberName =
"userName",
9496 .namespaceZero =
true,
9501 #ifdef UA_ENABLE_TYPENAMES 9502 .memberName =
"password",
9504 .namespaceZero =
true,
9509 #ifdef UA_ENABLE_TYPENAMES 9510 .memberName =
"encryptionAlgorithm",
9512 .namespaceZero =
true,
9520 #ifdef UA_ENABLE_TYPENAMES 9523 .namespaceZero =
true,
9531 #ifdef UA_ENABLE_TYPENAMES 9534 .namespaceZero =
true,
9542 #ifdef UA_ENABLE_TYPENAMES 9543 .memberName =
"requestHeader",
9545 .namespaceZero =
true,
9550 #ifdef UA_ENABLE_TYPENAMES 9551 .memberName =
"clientSignature",
9553 .namespaceZero =
true,
9558 #ifdef UA_ENABLE_TYPENAMES 9559 .memberName =
"clientSoftwareCertificates",
9561 .namespaceZero =
true,
9566 #ifdef UA_ENABLE_TYPENAMES 9567 .memberName =
"localeIds",
9569 .namespaceZero =
true,
9574 #ifdef UA_ENABLE_TYPENAMES 9575 .memberName =
"userIdentityToken",
9577 .namespaceZero =
true,
9582 #ifdef UA_ENABLE_TYPENAMES 9583 .memberName =
"userTokenSignature",
9585 .namespaceZero =
true,
9593 #ifdef UA_ENABLE_TYPENAMES 9594 .memberName =
"responseHeader",
9596 .namespaceZero =
true,
9601 #ifdef UA_ENABLE_TYPENAMES 9602 .memberName =
"serverProtocolVersion",
9604 .namespaceZero =
true,
9609 #ifdef UA_ENABLE_TYPENAMES 9610 .memberName =
"securityToken",
9612 .namespaceZero =
true,
9617 #ifdef UA_ENABLE_TYPENAMES 9618 .memberName =
"serverNonce",
9620 .namespaceZero =
true,
9628 #ifdef UA_ENABLE_TYPENAMES 9631 .namespaceZero =
true,
9639 #ifdef UA_ENABLE_TYPENAMES 9642 .namespaceZero =
true,
9650 #ifdef UA_ENABLE_TYPENAMES 9651 .memberName =
"responseHeader",
9653 .namespaceZero =
true,
9658 #ifdef UA_ENABLE_TYPENAMES 9659 .memberName =
"queryDataSets",
9661 .namespaceZero =
true,
9666 #ifdef UA_ENABLE_TYPENAMES 9667 .memberName =
"revisedContinuationPoint",
9669 .namespaceZero =
true,
9677 #ifdef UA_ENABLE_TYPENAMES 9678 .memberName =
"responseHeader",
9680 .namespaceZero =
true,
9685 #ifdef UA_ENABLE_TYPENAMES 9686 .memberName =
"serverNonce",
9688 .namespaceZero =
true,
9693 #ifdef UA_ENABLE_TYPENAMES 9694 .memberName =
"results",
9696 .namespaceZero =
true,
9701 #ifdef UA_ENABLE_TYPENAMES 9702 .memberName =
"diagnosticInfos",
9704 .namespaceZero =
true,
9712 #ifdef UA_ENABLE_TYPENAMES 9715 .namespaceZero =
true,
9723 #ifdef UA_ENABLE_TYPENAMES 9724 .memberName =
"requestHeader",
9726 .namespaceZero =
true,
9731 #ifdef UA_ENABLE_TYPENAMES 9732 .memberName =
"releaseContinuationPoint",
9734 .namespaceZero =
true,
9739 #ifdef UA_ENABLE_TYPENAMES 9740 .memberName =
"continuationPoint",
9742 .namespaceZero =
true,
9750 #ifdef UA_ENABLE_TYPENAMES 9751 .memberName =
"responseHeader",
9753 .namespaceZero =
true,
9758 #ifdef UA_ENABLE_TYPENAMES 9759 .memberName =
"results",
9761 .namespaceZero =
true,
9766 #ifdef UA_ENABLE_TYPENAMES 9767 .memberName =
"diagnosticInfos",
9769 .namespaceZero =
true,
9777 #ifdef UA_ENABLE_TYPENAMES 9778 .memberName =
"requestHeader",
9780 .namespaceZero =
true,
9785 #ifdef UA_ENABLE_TYPENAMES 9786 .memberName =
"releaseContinuationPoints",
9788 .namespaceZero =
true,
9793 #ifdef UA_ENABLE_TYPENAMES 9794 .memberName =
"continuationPoints",
9796 .namespaceZero =
true,
9804 #ifdef UA_ENABLE_TYPENAMES 9805 .memberName =
"requestHeader",
9807 .namespaceZero =
true,
9812 #ifdef UA_ENABLE_TYPENAMES 9813 .memberName =
"requestedPublishingInterval",
9815 .namespaceZero =
true,
9820 #ifdef UA_ENABLE_TYPENAMES 9821 .memberName =
"requestedLifetimeCount",
9823 .namespaceZero =
true,
9828 #ifdef UA_ENABLE_TYPENAMES 9829 .memberName =
"requestedMaxKeepAliveCount",
9831 .namespaceZero =
true,
9836 #ifdef UA_ENABLE_TYPENAMES 9837 .memberName =
"maxNotificationsPerPublish",
9839 .namespaceZero =
true,
9844 #ifdef UA_ENABLE_TYPENAMES 9845 .memberName =
"publishingEnabled",
9847 .namespaceZero =
true,
9852 #ifdef UA_ENABLE_TYPENAMES 9853 .memberName =
"priority",
9855 .namespaceZero =
true,
9863 #ifdef UA_ENABLE_TYPENAMES 9864 .memberName =
"specifiedAttributes",
9866 .namespaceZero =
true,
9871 #ifdef UA_ENABLE_TYPENAMES 9872 .memberName =
"displayName",
9874 .namespaceZero =
true,
9879 #ifdef UA_ENABLE_TYPENAMES 9880 .memberName =
"description",
9882 .namespaceZero =
true,
9887 #ifdef UA_ENABLE_TYPENAMES 9888 .memberName =
"writeMask",
9890 .namespaceZero =
true,
9895 #ifdef UA_ENABLE_TYPENAMES 9896 .memberName =
"userWriteMask",
9898 .namespaceZero =
true,
9903 #ifdef UA_ENABLE_TYPENAMES 9904 .memberName =
"value",
9906 .namespaceZero =
true,
9911 #ifdef UA_ENABLE_TYPENAMES 9912 .memberName =
"dataType",
9914 .namespaceZero =
true,
9919 #ifdef UA_ENABLE_TYPENAMES 9920 .memberName =
"valueRank",
9922 .namespaceZero =
true,
9927 #ifdef UA_ENABLE_TYPENAMES 9928 .memberName =
"arrayDimensions",
9930 .namespaceZero =
true,
9935 #ifdef UA_ENABLE_TYPENAMES 9936 .memberName =
"isAbstract",
9938 .namespaceZero =
true,
9946 #ifdef UA_ENABLE_TYPENAMES 9947 .memberName =
"statusCode",
9949 .namespaceZero =
true,
9954 #ifdef UA_ENABLE_TYPENAMES 9955 .memberName =
"targets",
9957 .namespaceZero =
true,
9965 #ifdef UA_ENABLE_TYPENAMES 9966 .memberName =
"responseHeader",
9968 .namespaceZero =
true,
9973 #ifdef UA_ENABLE_TYPENAMES 9974 .memberName =
"revisedPublishingInterval",
9976 .namespaceZero =
true,
9981 #ifdef UA_ENABLE_TYPENAMES 9982 .memberName =
"revisedLifetimeCount",
9984 .namespaceZero =
true,
9989 #ifdef UA_ENABLE_TYPENAMES 9990 .memberName =
"revisedMaxKeepAliveCount",
9992 .namespaceZero =
true,
10000 #ifdef UA_ENABLE_TYPENAMES 10001 .memberName =
"requestHeader",
10003 .namespaceZero =
true,
10008 #ifdef UA_ENABLE_TYPENAMES 10009 .memberName =
"clientProtocolVersion",
10011 .namespaceZero =
true,
10016 #ifdef UA_ENABLE_TYPENAMES 10017 .memberName =
"requestType",
10019 .namespaceZero =
true,
10024 #ifdef UA_ENABLE_TYPENAMES 10025 .memberName =
"securityMode",
10027 .namespaceZero =
true,
10032 #ifdef UA_ENABLE_TYPENAMES 10033 .memberName =
"clientNonce",
10035 .namespaceZero =
true,
10040 #ifdef UA_ENABLE_TYPENAMES 10041 .memberName =
"requestedLifetime",
10043 .namespaceZero =
true,
10051 #ifdef UA_ENABLE_TYPENAMES 10052 .memberName =
"responseHeader",
10054 .namespaceZero =
true,
10059 #ifdef UA_ENABLE_TYPENAMES 10060 .memberName =
"registeredNodeIds",
10062 .namespaceZero =
true,
10070 #ifdef UA_ENABLE_TYPENAMES 10071 .memberName =
"requestHeader",
10073 .namespaceZero =
true,
10078 #ifdef UA_ENABLE_TYPENAMES 10079 .memberName =
"deleteSubscriptions",
10081 .namespaceZero =
true,
10089 #ifdef UA_ENABLE_TYPENAMES 10090 .memberName =
"requestHeader",
10092 .namespaceZero =
true,
10097 #ifdef UA_ENABLE_TYPENAMES 10098 .memberName =
"subscriptionId",
10100 .namespaceZero =
true,
10105 #ifdef UA_ENABLE_TYPENAMES 10106 .memberName =
"requestedPublishingInterval",
10108 .namespaceZero =
true,
10113 #ifdef UA_ENABLE_TYPENAMES 10114 .memberName =
"requestedLifetimeCount",
10116 .namespaceZero =
true,
10121 #ifdef UA_ENABLE_TYPENAMES 10122 .memberName =
"requestedMaxKeepAliveCount",
10124 .namespaceZero =
true,
10129 #ifdef UA_ENABLE_TYPENAMES 10130 .memberName =
"maxNotificationsPerPublish",
10132 .namespaceZero =
true,
10137 #ifdef UA_ENABLE_TYPENAMES 10138 .memberName =
"priority",
10140 .namespaceZero =
true,
10148 #ifdef UA_ENABLE_TYPENAMES 10149 .memberName =
"policyId",
10151 .namespaceZero =
true,
10156 #ifdef UA_ENABLE_TYPENAMES 10157 .memberName =
"tokenType",
10159 .namespaceZero =
true,
10164 #ifdef UA_ENABLE_TYPENAMES 10165 .memberName =
"issuedTokenType",
10167 .namespaceZero =
true,
10172 #ifdef UA_ENABLE_TYPENAMES 10173 .memberName =
"issuerEndpointUrl",
10175 .namespaceZero =
true,
10180 #ifdef UA_ENABLE_TYPENAMES 10181 .memberName =
"securityPolicyUri",
10183 .namespaceZero =
true,
10191 #ifdef UA_ENABLE_TYPENAMES 10192 .memberName =
"requestHeader",
10194 .namespaceZero =
true,
10199 #ifdef UA_ENABLE_TYPENAMES 10200 .memberName =
"subscriptionId",
10202 .namespaceZero =
true,
10207 #ifdef UA_ENABLE_TYPENAMES 10208 .memberName =
"monitoredItemIds",
10210 .namespaceZero =
true,
10218 #ifdef UA_ENABLE_TYPENAMES 10219 .memberName =
"specifiedAttributes",
10221 .namespaceZero =
true,
10226 #ifdef UA_ENABLE_TYPENAMES 10227 .memberName =
"displayName",
10229 .namespaceZero =
true,
10234 #ifdef UA_ENABLE_TYPENAMES 10235 .memberName =
"description",
10237 .namespaceZero =
true,
10242 #ifdef UA_ENABLE_TYPENAMES 10243 .memberName =
"writeMask",
10245 .namespaceZero =
true,
10250 #ifdef UA_ENABLE_TYPENAMES 10251 .memberName =
"userWriteMask",
10253 .namespaceZero =
true,
10258 #ifdef UA_ENABLE_TYPENAMES 10259 .memberName =
"isAbstract",
10261 .namespaceZero =
true,
10266 #ifdef UA_ENABLE_TYPENAMES 10267 .memberName =
"symmetric",
10269 .namespaceZero =
true,
10274 #ifdef UA_ENABLE_TYPENAMES 10275 .memberName =
"inverseName",
10277 .namespaceZero =
true,
10285 #ifdef UA_ENABLE_TYPENAMES 10286 .memberName =
"requestHeader",
10288 .namespaceZero =
true,
10293 #ifdef UA_ENABLE_TYPENAMES 10294 .memberName =
"subscriptionId",
10296 .namespaceZero =
true,
10301 #ifdef UA_ENABLE_TYPENAMES 10302 .memberName =
"monitoringMode",
10304 .namespaceZero =
true,
10309 #ifdef UA_ENABLE_TYPENAMES 10310 .memberName =
"monitoredItemIds",
10312 .namespaceZero =
true,
10320 #ifdef UA_ENABLE_TYPENAMES 10321 .memberName =
"responseHeader",
10323 .namespaceZero =
true,
10331 #ifdef UA_ENABLE_TYPENAMES 10332 .memberName =
"requestHeader",
10334 .namespaceZero =
true,
10339 #ifdef UA_ENABLE_TYPENAMES 10340 .memberName =
"nodesToWrite",
10342 .namespaceZero =
true,
10350 #ifdef UA_ENABLE_TYPENAMES 10351 .memberName =
"specifiedAttributes",
10353 .namespaceZero =
true,
10358 #ifdef UA_ENABLE_TYPENAMES 10359 .memberName =
"displayName",
10361 .namespaceZero =
true,
10366 #ifdef UA_ENABLE_TYPENAMES 10367 .memberName =
"description",
10369 .namespaceZero =
true,
10374 #ifdef UA_ENABLE_TYPENAMES 10375 .memberName =
"writeMask",
10377 .namespaceZero =
true,
10382 #ifdef UA_ENABLE_TYPENAMES 10383 .memberName =
"userWriteMask",
10385 .namespaceZero =
true,
10390 #ifdef UA_ENABLE_TYPENAMES 10391 .memberName =
"eventNotifier",
10393 .namespaceZero =
true,
10401 #ifdef UA_ENABLE_TYPENAMES 10402 .memberName =
"nodeId",
10404 .namespaceZero =
true,
10409 #ifdef UA_ENABLE_TYPENAMES 10410 .memberName =
"browseDirection",
10412 .namespaceZero =
true,
10417 #ifdef UA_ENABLE_TYPENAMES 10418 .memberName =
"referenceTypeId",
10420 .namespaceZero =
true,
10425 #ifdef UA_ENABLE_TYPENAMES 10426 .memberName =
"includeSubtypes",
10428 .namespaceZero =
true,
10433 #ifdef UA_ENABLE_TYPENAMES 10434 .memberName =
"nodeClassMask",
10436 .namespaceZero =
true,
10441 #ifdef UA_ENABLE_TYPENAMES 10442 .memberName =
"resultMask",
10444 .namespaceZero =
true,
10452 #ifdef UA_ENABLE_TYPENAMES 10453 .memberName =
"requestHeader",
10455 .namespaceZero =
true,
10460 #ifdef UA_ENABLE_TYPENAMES 10461 .memberName =
"subscriptionId",
10463 .namespaceZero =
true,
10468 #ifdef UA_ENABLE_TYPENAMES 10469 .memberName =
"retransmitSequenceNumber",
10471 .namespaceZero =
true,
10479 #ifdef UA_ENABLE_TYPENAMES 10480 .memberName =
"requestHeader",
10482 .namespaceZero =
true,
10487 #ifdef UA_ENABLE_TYPENAMES 10488 .memberName =
"endpointUrl",
10490 .namespaceZero =
true,
10495 #ifdef UA_ENABLE_TYPENAMES 10496 .memberName =
"localeIds",
10498 .namespaceZero =
true,
10503 #ifdef UA_ENABLE_TYPENAMES 10504 .memberName =
"profileUris",
10506 .namespaceZero =
true,
10514 #ifdef UA_ENABLE_TYPENAMES 10515 .memberName =
"requestHeader",
10517 .namespaceZero =
true,
10522 #ifdef UA_ENABLE_TYPENAMES 10523 .memberName =
"subscriptionAcknowledgements",
10525 .namespaceZero =
true,
10533 #ifdef UA_ENABLE_TYPENAMES 10534 .memberName =
"responseHeader",
10536 .namespaceZero =
true,
10541 #ifdef UA_ENABLE_TYPENAMES 10542 .memberName =
"results",
10544 .namespaceZero =
true,
10549 #ifdef UA_ENABLE_TYPENAMES 10550 .memberName =
"diagnosticInfos",
10552 .namespaceZero =
true,
10560 #ifdef UA_ENABLE_TYPENAMES 10561 .memberName =
"monitoredItems",
10563 .namespaceZero =
true,
10568 #ifdef UA_ENABLE_TYPENAMES 10569 .memberName =
"diagnosticInfos",
10571 .namespaceZero =
true,
10579 #ifdef UA_ENABLE_TYPENAMES 10580 .memberName =
"responseHeader",
10582 .namespaceZero =
true,
10590 #ifdef UA_ENABLE_TYPENAMES 10591 .memberName =
"requestHeader",
10593 .namespaceZero =
true,
10598 #ifdef UA_ENABLE_TYPENAMES 10599 .memberName =
"subscriptionId",
10601 .namespaceZero =
true,
10606 #ifdef UA_ENABLE_TYPENAMES 10607 .memberName =
"timestampsToReturn",
10609 .namespaceZero =
true,
10614 #ifdef UA_ENABLE_TYPENAMES 10615 .memberName =
"itemsToModify",
10617 .namespaceZero =
true,
10625 #ifdef UA_ENABLE_TYPENAMES 10626 .memberName =
"responseHeader",
10628 .namespaceZero =
true,
10633 #ifdef UA_ENABLE_TYPENAMES 10634 .memberName =
"results",
10636 .namespaceZero =
true,
10641 #ifdef UA_ENABLE_TYPENAMES 10642 .memberName =
"diagnosticInfos",
10644 .namespaceZero =
true,
10652 #ifdef UA_ENABLE_TYPENAMES 10653 .memberName =
"requestHeader",
10655 .namespaceZero =
true,
10660 #ifdef UA_ENABLE_TYPENAMES 10661 .memberName =
"endpointUrl",
10663 .namespaceZero =
true,
10668 #ifdef UA_ENABLE_TYPENAMES 10669 .memberName =
"localeIds",
10671 .namespaceZero =
true,
10676 #ifdef UA_ENABLE_TYPENAMES 10677 .memberName =
"serverUris",
10679 .namespaceZero =
true,
10687 #ifdef UA_ENABLE_TYPENAMES 10688 .memberName =
"referenceTypeId",
10690 .namespaceZero =
true,
10695 #ifdef UA_ENABLE_TYPENAMES 10696 .memberName =
"isForward",
10698 .namespaceZero =
true,
10703 #ifdef UA_ENABLE_TYPENAMES 10704 .memberName =
"nodeId",
10706 .namespaceZero =
true,
10711 #ifdef UA_ENABLE_TYPENAMES 10712 .memberName =
"browseName",
10714 .namespaceZero =
true,
10719 #ifdef UA_ENABLE_TYPENAMES 10720 .memberName =
"displayName",
10722 .namespaceZero =
true,
10727 #ifdef UA_ENABLE_TYPENAMES 10728 .memberName =
"nodeClass",
10730 .namespaceZero =
true,
10735 #ifdef UA_ENABLE_TYPENAMES 10736 .memberName =
"typeDefinition",
10738 .namespaceZero =
true,
10746 #ifdef UA_ENABLE_TYPENAMES 10747 .memberName =
"responseHeader",
10749 .namespaceZero =
true,
10754 #ifdef UA_ENABLE_TYPENAMES 10755 .memberName =
"results",
10757 .namespaceZero =
true,
10762 #ifdef UA_ENABLE_TYPENAMES 10763 .memberName =
"diagnosticInfos",
10765 .namespaceZero =
true,
10773 #ifdef UA_ENABLE_TYPENAMES 10774 .memberName =
"elementResults",
10776 .namespaceZero =
true,
10781 #ifdef UA_ENABLE_TYPENAMES 10782 .memberName =
"elementDiagnosticInfos",
10784 .namespaceZero =
true,
10792 #ifdef UA_ENABLE_TYPENAMES 10793 .memberName =
"sourceNodeId",
10795 .namespaceZero =
true,
10800 #ifdef UA_ENABLE_TYPENAMES 10801 .memberName =
"referenceTypeId",
10803 .namespaceZero =
true,
10808 #ifdef UA_ENABLE_TYPENAMES 10809 .memberName =
"isForward",
10811 .namespaceZero =
true,
10816 #ifdef UA_ENABLE_TYPENAMES 10817 .memberName =
"targetServerUri",
10819 .namespaceZero =
true,
10824 #ifdef UA_ENABLE_TYPENAMES 10825 .memberName =
"targetNodeId",
10827 .namespaceZero =
true,
10832 #ifdef UA_ENABLE_TYPENAMES 10833 .memberName =
"targetNodeClass",
10835 .namespaceZero =
true,
10843 #ifdef UA_ENABLE_TYPENAMES 10844 .memberName =
"responseHeader",
10846 .namespaceZero =
true,
10851 #ifdef UA_ENABLE_TYPENAMES 10852 .memberName =
"subscriptionId",
10854 .namespaceZero =
true,
10859 #ifdef UA_ENABLE_TYPENAMES 10860 .memberName =
"revisedPublishingInterval",
10862 .namespaceZero =
true,
10867 #ifdef UA_ENABLE_TYPENAMES 10868 .memberName =
"revisedLifetimeCount",
10870 .namespaceZero =
true,
10875 #ifdef UA_ENABLE_TYPENAMES 10876 .memberName =
"revisedMaxKeepAliveCount",
10878 .namespaceZero =
true,
10886 #ifdef UA_ENABLE_TYPENAMES 10887 .memberName =
"responseHeader",
10889 .namespaceZero =
true,
10894 #ifdef UA_ENABLE_TYPENAMES 10895 .memberName =
"results",
10897 .namespaceZero =
true,
10902 #ifdef UA_ENABLE_TYPENAMES 10903 .memberName =
"diagnosticInfos",
10905 .namespaceZero =
true,
10913 #ifdef UA_ENABLE_TYPENAMES 10914 .memberName =
"elements",
10916 .namespaceZero =
true,
10924 #ifdef UA_ENABLE_TYPENAMES 10925 .memberName =
"responseHeader",
10927 .namespaceZero =
true,
10932 #ifdef UA_ENABLE_TYPENAMES 10933 .memberName =
"results",
10935 .namespaceZero =
true,
10940 #ifdef UA_ENABLE_TYPENAMES 10941 .memberName =
"diagnosticInfos",
10943 .namespaceZero =
true,
10951 #ifdef UA_ENABLE_TYPENAMES 10952 .memberName =
"responseHeader",
10954 .namespaceZero =
true,
10959 #ifdef UA_ENABLE_TYPENAMES 10960 .memberName =
"results",
10962 .namespaceZero =
true,
10967 #ifdef UA_ENABLE_TYPENAMES 10968 .memberName =
"diagnosticInfos",
10970 .namespaceZero =
true,
10978 #ifdef UA_ENABLE_TYPENAMES 10979 .memberName =
"responseHeader",
10981 .namespaceZero =
true,
10986 #ifdef UA_ENABLE_TYPENAMES 10987 .memberName =
"results",
10989 .namespaceZero =
true,
10994 #ifdef UA_ENABLE_TYPENAMES 10995 .memberName =
"diagnosticInfos",
10997 .namespaceZero =
true,
11005 #ifdef UA_ENABLE_TYPENAMES 11006 .memberName =
"responseHeader",
11008 .namespaceZero =
true,
11013 #ifdef UA_ENABLE_TYPENAMES 11014 .memberName =
"results",
11016 .namespaceZero =
true,
11021 #ifdef UA_ENABLE_TYPENAMES 11022 .memberName =
"diagnosticInfos",
11024 .namespaceZero =
true,
11032 #ifdef UA_ENABLE_TYPENAMES 11033 .memberName =
"responseHeader",
11035 .namespaceZero =
true,
11040 #ifdef UA_ENABLE_TYPENAMES 11041 .memberName =
"notificationMessage",
11043 .namespaceZero =
true,
11051 #ifdef UA_ENABLE_TYPENAMES 11052 .memberName =
"itemToMonitor",
11054 .namespaceZero =
true,
11059 #ifdef UA_ENABLE_TYPENAMES 11060 .memberName =
"monitoringMode",
11062 .namespaceZero =
true,
11067 #ifdef UA_ENABLE_TYPENAMES 11068 .memberName =
"requestedParameters",
11070 .namespaceZero =
true,
11078 #ifdef UA_ENABLE_TYPENAMES 11079 .memberName =
"requestHeader",
11081 .namespaceZero =
true,
11086 #ifdef UA_ENABLE_TYPENAMES 11087 .memberName =
"referencesToDelete",
11089 .namespaceZero =
true,
11097 #ifdef UA_ENABLE_TYPENAMES 11098 .memberName =
"responseHeader",
11100 .namespaceZero =
true,
11105 #ifdef UA_ENABLE_TYPENAMES 11106 .memberName =
"results",
11108 .namespaceZero =
true,
11113 #ifdef UA_ENABLE_TYPENAMES 11114 .memberName =
"diagnosticInfos",
11116 .namespaceZero =
true,
11124 #ifdef UA_ENABLE_TYPENAMES 11125 .memberName =
"responseHeader",
11127 .namespaceZero =
true,
11132 #ifdef UA_ENABLE_TYPENAMES 11133 .memberName =
"results",
11135 .namespaceZero =
true,
11140 #ifdef UA_ENABLE_TYPENAMES 11141 .memberName =
"diagnosticInfos",
11143 .namespaceZero =
true,
11151 #ifdef UA_ENABLE_TYPENAMES 11152 .memberName =
"requestHeader",
11154 .namespaceZero =
true,
11159 #ifdef UA_ENABLE_TYPENAMES 11160 .memberName =
"referencesToAdd",
11162 .namespaceZero =
true,
11170 #ifdef UA_ENABLE_TYPENAMES 11171 .memberName =
"requestHeader",
11173 .namespaceZero =
true,
11178 #ifdef UA_ENABLE_TYPENAMES 11179 .memberName =
"maxAge",
11181 .namespaceZero =
true,
11186 #ifdef UA_ENABLE_TYPENAMES 11187 .memberName =
"timestampsToReturn",
11189 .namespaceZero =
true,
11194 #ifdef UA_ENABLE_TYPENAMES 11195 .memberName =
"nodesToRead",
11197 .namespaceZero =
true,
11205 #ifdef UA_ENABLE_TYPENAMES 11206 .memberName =
"parentNodeId",
11208 .namespaceZero =
true,
11213 #ifdef UA_ENABLE_TYPENAMES 11214 .memberName =
"referenceTypeId",
11216 .namespaceZero =
true,
11221 #ifdef UA_ENABLE_TYPENAMES 11222 .memberName =
"requestedNewNodeId",
11224 .namespaceZero =
true,
11229 #ifdef UA_ENABLE_TYPENAMES 11230 .memberName =
"browseName",
11232 .namespaceZero =
true,
11237 #ifdef UA_ENABLE_TYPENAMES 11238 .memberName =
"nodeClass",
11240 .namespaceZero =
true,
11245 #ifdef UA_ENABLE_TYPENAMES 11246 .memberName =
"nodeAttributes",
11248 .namespaceZero =
true,
11253 #ifdef UA_ENABLE_TYPENAMES 11254 .memberName =
"typeDefinition",
11256 .namespaceZero =
true,
11264 #ifdef UA_ENABLE_TYPENAMES 11265 .memberName =
"startTime",
11267 .namespaceZero =
true,
11272 #ifdef UA_ENABLE_TYPENAMES 11273 .memberName =
"currentTime",
11275 .namespaceZero =
true,
11280 #ifdef UA_ENABLE_TYPENAMES 11281 .memberName =
"state",
11283 .namespaceZero =
true,
11288 #ifdef UA_ENABLE_TYPENAMES 11289 .memberName =
"buildInfo",
11291 .namespaceZero =
true,
11296 #ifdef UA_ENABLE_TYPENAMES 11297 .memberName =
"secondsTillShutdown",
11299 .namespaceZero =
true,
11304 #ifdef UA_ENABLE_TYPENAMES 11305 .memberName =
"shutdownReason",
11307 .namespaceZero =
true,
11315 #ifdef UA_ENABLE_TYPENAMES 11316 .memberName =
"responseHeader",
11318 .namespaceZero =
true,
11323 #ifdef UA_ENABLE_TYPENAMES 11324 .memberName =
"results",
11326 .namespaceZero =
true,
11331 #ifdef UA_ENABLE_TYPENAMES 11332 .memberName =
"diagnosticInfos",
11334 .namespaceZero =
true,
11342 #ifdef UA_ENABLE_TYPENAMES 11343 .memberName =
"responseHeader",
11345 .namespaceZero =
true,
11350 #ifdef UA_ENABLE_TYPENAMES 11351 .memberName =
"results",
11353 .namespaceZero =
true,
11358 #ifdef UA_ENABLE_TYPENAMES 11359 .memberName =
"diagnosticInfos",
11361 .namespaceZero =
true,
11369 #ifdef UA_ENABLE_TYPENAMES 11370 .memberName =
"trigger",
11372 .namespaceZero =
true,
11377 #ifdef UA_ENABLE_TYPENAMES 11378 .memberName =
"deadbandType",
11380 .namespaceZero =
true,
11385 #ifdef UA_ENABLE_TYPENAMES 11386 .memberName =
"deadbandValue",
11388 .namespaceZero =
true,
11396 #ifdef UA_ENABLE_TYPENAMES 11397 .memberName =
"filterOperator",
11399 .namespaceZero =
true,
11404 #ifdef UA_ENABLE_TYPENAMES 11405 .memberName =
"filterOperands",
11407 .namespaceZero =
true,
11415 #ifdef UA_ENABLE_TYPENAMES 11416 .memberName =
"responseHeader",
11418 .namespaceZero =
true,
11426 #ifdef UA_ENABLE_TYPENAMES 11427 .memberName =
"applicationUri",
11429 .namespaceZero =
true,
11434 #ifdef UA_ENABLE_TYPENAMES 11435 .memberName =
"productUri",
11437 .namespaceZero =
true,
11442 #ifdef UA_ENABLE_TYPENAMES 11443 .memberName =
"applicationName",
11445 .namespaceZero =
true,
11450 #ifdef UA_ENABLE_TYPENAMES 11451 .memberName =
"applicationType",
11453 .namespaceZero =
true,
11458 #ifdef UA_ENABLE_TYPENAMES 11459 .memberName =
"gatewayServerUri",
11461 .namespaceZero =
true,
11466 #ifdef UA_ENABLE_TYPENAMES 11467 .memberName =
"discoveryProfileUri",
11469 .namespaceZero =
true,
11474 #ifdef UA_ENABLE_TYPENAMES 11475 .memberName =
"discoveryUrls",
11477 .namespaceZero =
true,
11485 #ifdef UA_ENABLE_TYPENAMES 11486 .memberName =
"responseHeader",
11488 .namespaceZero =
true,
11496 #ifdef UA_ENABLE_TYPENAMES 11497 .memberName =
"responseHeader",
11499 .namespaceZero =
true,
11504 #ifdef UA_ENABLE_TYPENAMES 11505 .memberName =
"servers",
11507 .namespaceZero =
true,
11515 #ifdef UA_ENABLE_TYPENAMES 11516 .memberName =
"requestHeader",
11518 .namespaceZero =
true,
11523 #ifdef UA_ENABLE_TYPENAMES 11524 .memberName =
"subscriptionId",
11526 .namespaceZero =
true,
11531 #ifdef UA_ENABLE_TYPENAMES 11532 .memberName =
"timestampsToReturn",
11534 .namespaceZero =
true,
11539 #ifdef UA_ENABLE_TYPENAMES 11540 .memberName =
"itemsToCreate",
11542 .namespaceZero =
true,
11550 #ifdef UA_ENABLE_TYPENAMES 11551 .memberName =
"elements",
11553 .namespaceZero =
true,
11561 #ifdef UA_ENABLE_TYPENAMES 11562 .memberName =
"responseHeader",
11564 .namespaceZero =
true,
11569 #ifdef UA_ENABLE_TYPENAMES 11570 .memberName =
"queryDataSets",
11572 .namespaceZero =
true,
11577 #ifdef UA_ENABLE_TYPENAMES 11578 .memberName =
"continuationPoint",
11580 .namespaceZero =
true,
11585 #ifdef UA_ENABLE_TYPENAMES 11586 .memberName =
"parsingResults",
11588 .namespaceZero =
true,
11593 #ifdef UA_ENABLE_TYPENAMES 11594 .memberName =
"diagnosticInfos",
11596 .namespaceZero =
true,
11601 #ifdef UA_ENABLE_TYPENAMES 11602 .memberName =
"filterResult",
11604 .namespaceZero =
true,
11612 #ifdef UA_ENABLE_TYPENAMES 11613 .memberName =
"requestHeader",
11615 .namespaceZero =
true,
11620 #ifdef UA_ENABLE_TYPENAMES 11621 .memberName =
"nodesToAdd",
11623 .namespaceZero =
true,
11631 #ifdef UA_ENABLE_TYPENAMES 11632 .memberName =
"requestHeader",
11634 .namespaceZero =
true,
11639 #ifdef UA_ENABLE_TYPENAMES 11640 .memberName =
"view",
11642 .namespaceZero =
true,
11647 #ifdef UA_ENABLE_TYPENAMES 11648 .memberName =
"requestedMaxReferencesPerNode",
11650 .namespaceZero =
true,
11655 #ifdef UA_ENABLE_TYPENAMES 11656 .memberName =
"nodesToBrowse",
11658 .namespaceZero =
true,
11666 #ifdef UA_ENABLE_TYPENAMES 11667 .memberName =
"startingNode",
11669 .namespaceZero =
true,
11674 #ifdef UA_ENABLE_TYPENAMES 11675 .memberName =
"relativePath",
11677 .namespaceZero =
true,
11685 #ifdef UA_ENABLE_TYPENAMES 11686 .memberName =
"statusCode",
11688 .namespaceZero =
true,
11693 #ifdef UA_ENABLE_TYPENAMES 11694 .memberName =
"continuationPoint",
11696 .namespaceZero =
true,
11701 #ifdef UA_ENABLE_TYPENAMES 11702 .memberName =
"references",
11704 .namespaceZero =
true,
11712 #ifdef UA_ENABLE_TYPENAMES 11713 .memberName =
"requestHeader",
11715 .namespaceZero =
true,
11720 #ifdef UA_ENABLE_TYPENAMES 11721 .memberName =
"clientDescription",
11723 .namespaceZero =
true,
11728 #ifdef UA_ENABLE_TYPENAMES 11729 .memberName =
"serverUri",
11731 .namespaceZero =
true,
11736 #ifdef UA_ENABLE_TYPENAMES 11737 .memberName =
"endpointUrl",
11739 .namespaceZero =
true,
11744 #ifdef UA_ENABLE_TYPENAMES 11745 .memberName =
"sessionName",
11747 .namespaceZero =
true,
11752 #ifdef UA_ENABLE_TYPENAMES 11753 .memberName =
"clientNonce",
11755 .namespaceZero =
true,
11760 #ifdef UA_ENABLE_TYPENAMES 11761 .memberName =
"clientCertificate",
11763 .namespaceZero =
true,
11768 #ifdef UA_ENABLE_TYPENAMES 11769 .memberName =
"requestedSessionTimeout",
11771 .namespaceZero =
true,
11776 #ifdef UA_ENABLE_TYPENAMES 11777 .memberName =
"maxResponseMessageSize",
11779 .namespaceZero =
true,
11787 #ifdef UA_ENABLE_TYPENAMES 11788 .memberName =
"relativePath",
11790 .namespaceZero =
true,
11795 #ifdef UA_ENABLE_TYPENAMES 11796 .memberName =
"attributeId",
11798 .namespaceZero =
true,
11803 #ifdef UA_ENABLE_TYPENAMES 11804 .memberName =
"indexRange",
11806 .namespaceZero =
true,
11814 #ifdef UA_ENABLE_TYPENAMES 11815 .memberName =
"endpointUrl",
11817 .namespaceZero =
true,
11822 #ifdef UA_ENABLE_TYPENAMES 11823 .memberName =
"server",
11825 .namespaceZero =
true,
11830 #ifdef UA_ENABLE_TYPENAMES 11831 .memberName =
"serverCertificate",
11833 .namespaceZero =
true,
11838 #ifdef UA_ENABLE_TYPENAMES 11839 .memberName =
"securityMode",
11841 .namespaceZero =
true,
11846 #ifdef UA_ENABLE_TYPENAMES 11847 .memberName =
"securityPolicyUri",
11849 .namespaceZero =
true,
11854 #ifdef UA_ENABLE_TYPENAMES 11855 .memberName =
"userIdentityTokens",
11857 .namespaceZero =
true,
11862 #ifdef UA_ENABLE_TYPENAMES 11863 .memberName =
"transportProfileUri",
11865 .namespaceZero =
true,
11870 #ifdef UA_ENABLE_TYPENAMES 11871 .memberName =
"securityLevel",
11873 .namespaceZero =
true,
11881 #ifdef UA_ENABLE_TYPENAMES 11882 .memberName =
"responseHeader",
11884 .namespaceZero =
true,
11889 #ifdef UA_ENABLE_TYPENAMES 11890 .memberName =
"endpoints",
11892 .namespaceZero =
true,
11900 #ifdef UA_ENABLE_TYPENAMES 11901 .memberName =
"typeDefinitionNode",
11903 .namespaceZero =
true,
11908 #ifdef UA_ENABLE_TYPENAMES 11909 .memberName =
"includeSubTypes",
11911 .namespaceZero =
true,
11916 #ifdef UA_ENABLE_TYPENAMES 11917 .memberName =
"dataToReturn",
11919 .namespaceZero =
true,
11927 #ifdef UA_ENABLE_TYPENAMES 11928 .memberName =
"responseHeader",
11930 .namespaceZero =
true,
11935 #ifdef UA_ENABLE_TYPENAMES 11936 .memberName =
"results",
11938 .namespaceZero =
true,
11943 #ifdef UA_ENABLE_TYPENAMES 11944 .memberName =
"diagnosticInfos",
11946 .namespaceZero =
true,
11954 #ifdef UA_ENABLE_TYPENAMES 11955 .memberName =
"requestHeader",
11957 .namespaceZero =
true,
11962 #ifdef UA_ENABLE_TYPENAMES 11963 .memberName =
"browsePaths",
11965 .namespaceZero =
true,
11973 #ifdef UA_ENABLE_TYPENAMES 11974 .memberName =
"responseHeader",
11976 .namespaceZero =
true,
11981 #ifdef UA_ENABLE_TYPENAMES 11982 .memberName =
"results",
11984 .namespaceZero =
true,
11989 #ifdef UA_ENABLE_TYPENAMES 11990 .memberName =
"diagnosticInfos",
11992 .namespaceZero =
true,
12000 #ifdef UA_ENABLE_TYPENAMES 12001 .memberName =
"responseHeader",
12003 .namespaceZero =
true,
12008 #ifdef UA_ENABLE_TYPENAMES 12009 .memberName =
"sessionId",
12011 .namespaceZero =
true,
12016 #ifdef UA_ENABLE_TYPENAMES 12017 .memberName =
"authenticationToken",
12019 .namespaceZero =
true,
12024 #ifdef UA_ENABLE_TYPENAMES 12025 .memberName =
"revisedSessionTimeout",
12027 .namespaceZero =
true,
12032 #ifdef UA_ENABLE_TYPENAMES 12033 .memberName =
"serverNonce",
12035 .namespaceZero =
true,
12040 #ifdef UA_ENABLE_TYPENAMES 12041 .memberName =
"serverCertificate",
12043 .namespaceZero =
true,
12048 #ifdef UA_ENABLE_TYPENAMES 12049 .memberName =
"serverEndpoints",
12051 .namespaceZero =
true,
12056 #ifdef UA_ENABLE_TYPENAMES 12057 .memberName =
"serverSoftwareCertificates",
12059 .namespaceZero =
true,
12064 #ifdef UA_ENABLE_TYPENAMES 12065 .memberName =
"serverSignature",
12067 .namespaceZero =
true,
12072 #ifdef UA_ENABLE_TYPENAMES 12073 .memberName =
"maxRequestMessageSize",
12075 .namespaceZero =
true,
12083 #ifdef UA_ENABLE_TYPENAMES 12084 .memberName =
"requestHeader",
12086 .namespaceZero =
true,
12091 #ifdef UA_ENABLE_TYPENAMES 12092 .memberName =
"view",
12094 .namespaceZero =
true,
12099 #ifdef UA_ENABLE_TYPENAMES 12100 .memberName =
"nodeTypes",
12102 .namespaceZero =
true,
12107 #ifdef UA_ENABLE_TYPENAMES 12108 .memberName =
"filter",
12110 .namespaceZero =
true,
12115 #ifdef UA_ENABLE_TYPENAMES 12116 .memberName =
"maxDataSetsToReturn",
12118 .namespaceZero =
true,
12123 #ifdef UA_ENABLE_TYPENAMES 12124 .memberName =
"maxReferencesToReturn",
12126 .namespaceZero =
true,
12135 #ifdef UA_ENABLE_TYPENAMES 12136 .typeName =
"Boolean",
12141 .overlayable =
true,
12142 .binaryEncodingId = 0,
12144 .members = Boolean_members },
12147 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 2},
12149 #ifdef UA_ENABLE_TYPENAMES 12150 .typeName =
"SByte",
12155 .overlayable =
true,
12156 .binaryEncodingId = 0,
12158 .members = SByte_members },
12161 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 3},
12163 #ifdef UA_ENABLE_TYPENAMES 12164 .typeName =
"Byte",
12169 .overlayable =
true,
12170 .binaryEncodingId = 0,
12172 .members = Byte_members },
12175 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 4},
12177 #ifdef UA_ENABLE_TYPENAMES 12178 .typeName =
"Int16",
12184 .binaryEncodingId = 0,
12186 .members = Int16_members },
12189 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 5},
12191 #ifdef UA_ENABLE_TYPENAMES 12192 .typeName =
"UInt16",
12198 .binaryEncodingId = 0,
12200 .members = UInt16_members },
12203 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12205 #ifdef UA_ENABLE_TYPENAMES 12206 .typeName =
"Int32",
12212 .binaryEncodingId = 0,
12214 .members = Int32_members },
12217 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 7},
12219 #ifdef UA_ENABLE_TYPENAMES 12220 .typeName =
"UInt32",
12226 .binaryEncodingId = 0,
12228 .members = UInt32_members },
12231 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 8},
12233 #ifdef UA_ENABLE_TYPENAMES 12234 .typeName =
"Int64",
12240 .binaryEncodingId = 0,
12242 .members = Int64_members },
12245 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 9},
12247 #ifdef UA_ENABLE_TYPENAMES 12248 .typeName =
"UInt64",
12254 .binaryEncodingId = 0,
12256 .members = UInt64_members },
12259 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 10},
12261 #ifdef UA_ENABLE_TYPENAMES 12262 .typeName =
"Float",
12268 .binaryEncodingId = 0,
12270 .members = Float_members },
12273 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 11},
12275 #ifdef UA_ENABLE_TYPENAMES 12276 .typeName =
"Double",
12282 .binaryEncodingId = 0,
12284 .members = Double_members },
12287 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 12},
12289 #ifdef UA_ENABLE_TYPENAMES 12290 .typeName =
"String",
12294 .fixedSize =
false,
12295 .overlayable =
false,
12296 .binaryEncodingId = 0,
12298 .members = String_members },
12301 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 13},
12303 #ifdef UA_ENABLE_TYPENAMES 12304 .typeName =
"DateTime",
12310 .binaryEncodingId = 0,
12312 .members = DateTime_members },
12315 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 14},
12317 #ifdef UA_ENABLE_TYPENAMES 12318 .typeName =
"Guid",
12324 .binaryEncodingId = 0,
12326 .members = Guid_members },
12329 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 15},
12331 #ifdef UA_ENABLE_TYPENAMES 12332 .typeName =
"ByteString",
12336 .fixedSize =
false,
12337 .overlayable =
false,
12338 .binaryEncodingId = 0,
12340 .members = ByteString_members },
12343 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 16},
12345 #ifdef UA_ENABLE_TYPENAMES 12346 .typeName =
"XmlElement",
12350 .fixedSize =
false,
12351 .overlayable =
false,
12352 .binaryEncodingId = 0,
12354 .members = XmlElement_members },
12357 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 17},
12359 #ifdef UA_ENABLE_TYPENAMES 12360 .typeName =
"NodeId",
12364 .fixedSize =
false,
12365 .overlayable =
false,
12366 .binaryEncodingId = 0,
12368 .members = NodeId_members },
12371 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 18},
12373 #ifdef UA_ENABLE_TYPENAMES 12374 .typeName =
"ExpandedNodeId",
12378 .fixedSize =
false,
12379 .overlayable =
false,
12380 .binaryEncodingId = 0,
12382 .members = ExpandedNodeId_members },
12385 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 19},
12387 #ifdef UA_ENABLE_TYPENAMES 12388 .typeName =
"StatusCode",
12394 .binaryEncodingId = 0,
12396 .members = StatusCode_members },
12399 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 20},
12401 #ifdef UA_ENABLE_TYPENAMES 12402 .typeName =
"QualifiedName",
12406 .fixedSize =
false,
12407 .overlayable =
false,
12408 .binaryEncodingId = 0,
12410 .members = QualifiedName_members },
12413 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 21},
12415 #ifdef UA_ENABLE_TYPENAMES 12416 .typeName =
"LocalizedText",
12420 .fixedSize =
false,
12421 .overlayable =
false,
12422 .binaryEncodingId = 0,
12424 .members = LocalizedText_members },
12427 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 22},
12429 #ifdef UA_ENABLE_TYPENAMES 12430 .typeName =
"ExtensionObject",
12434 .fixedSize =
false,
12435 .overlayable =
false,
12436 .binaryEncodingId = 0,
12438 .members = ExtensionObject_members },
12441 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 23},
12443 #ifdef UA_ENABLE_TYPENAMES 12444 .typeName =
"DataValue",
12448 .fixedSize =
false,
12449 .overlayable =
false,
12450 .binaryEncodingId = 0,
12452 .members = DataValue_members },
12455 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 24},
12457 #ifdef UA_ENABLE_TYPENAMES 12458 .typeName =
"Variant",
12462 .fixedSize =
false,
12463 .overlayable =
false,
12464 .binaryEncodingId = 0,
12466 .members = Variant_members },
12469 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 25},
12471 #ifdef UA_ENABLE_TYPENAMES 12472 .typeName =
"DiagnosticInfo",
12476 .fixedSize =
false,
12477 .overlayable =
false,
12478 .binaryEncodingId = 0,
12480 .members = DiagnosticInfo_members },
12483 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 344},
12485 #ifdef UA_ENABLE_TYPENAMES 12486 .typeName =
"SignedSoftwareCertificate",
12490 .fixedSize =
false,
12491 .overlayable =
false,
12492 .binaryEncodingId = 346,
12494 .members = SignedSoftwareCertificate_members },
12497 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 546},
12499 #ifdef UA_ENABLE_TYPENAMES 12500 .typeName =
"BrowsePathTarget",
12504 .fixedSize =
false,
12505 .overlayable =
false,
12506 .binaryEncodingId = 548,
12508 .members = BrowsePathTarget_members },
12511 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 373},
12513 #ifdef UA_ENABLE_TYPENAMES 12514 .typeName =
"ViewAttributes",
12518 .fixedSize =
false,
12519 .overlayable =
false,
12520 .binaryEncodingId = 375,
12522 .members = ViewAttributes_members },
12525 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12527 #ifdef UA_ENABLE_TYPENAMES 12528 .typeName =
"BrowseResultMask",
12534 .binaryEncodingId = 0,
12536 .members = BrowseResultMask_members },
12539 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 389},
12541 #ifdef UA_ENABLE_TYPENAMES 12542 .typeName =
"RequestHeader",
12546 .fixedSize =
false,
12547 .overlayable =
false,
12548 .binaryEncodingId = 391,
12550 .members = RequestHeader_members },
12553 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 758},
12555 #ifdef UA_ENABLE_TYPENAMES 12556 .typeName =
"MonitoredItemModifyResult",
12560 .fixedSize =
false,
12561 .overlayable =
false,
12562 .binaryEncodingId = 760,
12564 .members = MonitoredItemModifyResult_members },
12567 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 450},
12569 #ifdef UA_ENABLE_TYPENAMES 12570 .typeName =
"CloseSecureChannelRequest",
12574 .fixedSize =
false,
12575 .overlayable =
false,
12576 .binaryEncodingId = 452,
12578 .members = CloseSecureChannelRequest_members },
12581 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 483},
12583 #ifdef UA_ENABLE_TYPENAMES 12584 .typeName =
"AddNodesResult",
12588 .fixedSize =
false,
12589 .overlayable =
false,
12590 .binaryEncodingId = 485,
12592 .members = AddNodesResult_members },
12595 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 355},
12597 #ifdef UA_ENABLE_TYPENAMES 12598 .typeName =
"VariableAttributes",
12602 .fixedSize =
false,
12603 .overlayable =
false,
12604 .binaryEncodingId = 357,
12606 .members = VariableAttributes_members },
12609 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 803},
12611 #ifdef UA_ENABLE_TYPENAMES 12612 .typeName =
"NotificationMessage",
12616 .fixedSize =
false,
12617 .overlayable =
false,
12618 .binaryEncodingId = 805,
12620 .members = NotificationMessage_members },
12623 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12625 #ifdef UA_ENABLE_TYPENAMES 12626 .typeName =
"NodeAttributesMask",
12632 .binaryEncodingId = 0,
12634 .members = NodeAttributesMask_members },
12637 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12639 #ifdef UA_ENABLE_TYPENAMES 12640 .typeName =
"MonitoringMode",
12646 .binaryEncodingId = 0,
12648 .members = MonitoringMode_members },
12651 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 707},
12653 #ifdef UA_ENABLE_TYPENAMES 12654 .typeName =
"CallMethodResult",
12658 .fixedSize =
false,
12659 .overlayable =
false,
12660 .binaryEncodingId = 709,
12662 .members = CallMethodResult_members },
12665 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 610},
12667 #ifdef UA_ENABLE_TYPENAMES 12668 .typeName =
"ParsingResult",
12672 .fixedSize =
false,
12673 .overlayable =
false,
12674 .binaryEncodingId = 612,
12676 .members = ParsingResult_members },
12679 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 537},
12681 #ifdef UA_ENABLE_TYPENAMES 12682 .typeName =
"RelativePathElement",
12686 .fixedSize =
false,
12687 .overlayable =
false,
12688 .binaryEncodingId = 539,
12690 .members = RelativePathElement_members },
12693 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12695 #ifdef UA_ENABLE_TYPENAMES 12696 .typeName =
"BrowseDirection",
12702 .binaryEncodingId = 0,
12704 .members = BrowseDirection_members },
12707 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 704},
12709 #ifdef UA_ENABLE_TYPENAMES 12710 .typeName =
"CallMethodRequest",
12714 .fixedSize =
false,
12715 .overlayable =
false,
12716 .binaryEncodingId = 706,
12718 .members = CallMethodRequest_members },
12721 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 564},
12723 #ifdef UA_ENABLE_TYPENAMES 12724 .typeName =
"UnregisterNodesRequest",
12728 .fixedSize =
false,
12729 .overlayable =
false,
12730 .binaryEncodingId = 566,
12732 .members = UnregisterNodesRequest_members },
12735 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 604},
12737 #ifdef UA_ENABLE_TYPENAMES 12738 .typeName =
"ContentFilterElementResult",
12742 .fixedSize =
false,
12743 .overlayable =
false,
12744 .binaryEncodingId = 606,
12746 .members = ContentFilterElementResult_members },
12749 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 577},
12751 #ifdef UA_ENABLE_TYPENAMES 12752 .typeName =
"QueryDataSet",
12756 .fixedSize =
false,
12757 .overlayable =
false,
12758 .binaryEncodingId = 579,
12760 .members = QueryDataSet_members },
12763 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 319},
12765 #ifdef UA_ENABLE_TYPENAMES 12766 .typeName =
"AnonymousIdentityToken",
12770 .fixedSize =
false,
12771 .overlayable =
false,
12772 .binaryEncodingId = 321,
12774 .members = AnonymousIdentityToken_members },
12777 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 797},
12779 #ifdef UA_ENABLE_TYPENAMES 12780 .typeName =
"SetPublishingModeRequest",
12784 .fixedSize =
false,
12785 .overlayable =
false,
12786 .binaryEncodingId = 799,
12788 .members = SetPublishingModeRequest_members },
12791 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12793 #ifdef UA_ENABLE_TYPENAMES 12794 .typeName =
"TimestampsToReturn",
12800 .binaryEncodingId = 0,
12802 .members = TimestampsToReturn_members },
12805 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 710},
12807 #ifdef UA_ENABLE_TYPENAMES 12808 .typeName =
"CallRequest",
12812 .fixedSize =
false,
12813 .overlayable =
false,
12814 .binaryEncodingId = 712,
12816 .members = CallRequest_members },
12819 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 358},
12821 #ifdef UA_ENABLE_TYPENAMES 12822 .typeName =
"MethodAttributes",
12826 .fixedSize =
false,
12827 .overlayable =
false,
12828 .binaryEncodingId = 360,
12830 .members = MethodAttributes_members },
12833 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 385},
12835 #ifdef UA_ENABLE_TYPENAMES 12836 .typeName =
"DeleteReferencesItem",
12840 .fixedSize =
false,
12841 .overlayable =
false,
12842 .binaryEncodingId = 387,
12844 .members = DeleteReferencesItem_members },
12847 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 668},
12849 #ifdef UA_ENABLE_TYPENAMES 12850 .typeName =
"WriteValue",
12854 .fixedSize =
false,
12855 .overlayable =
false,
12856 .binaryEncodingId = 670,
12858 .members = WriteValue_members },
12861 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 746},
12863 #ifdef UA_ENABLE_TYPENAMES 12864 .typeName =
"MonitoredItemCreateResult",
12868 .fixedSize =
false,
12869 .overlayable =
false,
12870 .binaryEncodingId = 748,
12872 .members = MonitoredItemCreateResult_members },
12875 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12877 #ifdef UA_ENABLE_TYPENAMES 12878 .typeName =
"MessageSecurityMode",
12884 .binaryEncodingId = 0,
12886 .members = MessageSecurityMode_members },
12889 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 740},
12891 #ifdef UA_ENABLE_TYPENAMES 12892 .typeName =
"MonitoringParameters",
12896 .fixedSize =
false,
12897 .overlayable =
false,
12898 .binaryEncodingId = 742,
12900 .members = MonitoringParameters_members },
12903 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 456},
12905 #ifdef UA_ENABLE_TYPENAMES 12906 .typeName =
"SignatureData",
12910 .fixedSize =
false,
12911 .overlayable =
false,
12912 .binaryEncodingId = 458,
12914 .members = SignatureData_members },
12917 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 285},
12919 #ifdef UA_ENABLE_TYPENAMES 12920 .typeName =
"ReferenceNode",
12924 .fixedSize =
false,
12925 .overlayable =
false,
12926 .binaryEncodingId = 287,
12928 .members = ReferenceNode_members },
12931 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 296},
12933 #ifdef UA_ENABLE_TYPENAMES 12934 .typeName =
"Argument",
12938 .fixedSize =
false,
12939 .overlayable =
false,
12940 .binaryEncodingId = 298,
12942 .members = Argument_members },
12945 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 316},
12947 #ifdef UA_ENABLE_TYPENAMES 12948 .typeName =
"UserIdentityToken",
12952 .fixedSize =
false,
12953 .overlayable =
false,
12954 .binaryEncodingId = 318,
12956 .members = UserIdentityToken_members },
12959 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 361},
12961 #ifdef UA_ENABLE_TYPENAMES 12962 .typeName =
"ObjectTypeAttributes",
12966 .fixedSize =
false,
12967 .overlayable =
false,
12968 .binaryEncodingId = 363,
12970 .members = ObjectTypeAttributes_members },
12973 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12975 #ifdef UA_ENABLE_TYPENAMES 12976 .typeName =
"DeadbandType",
12982 .binaryEncodingId = 0,
12984 .members = DeadbandType_members },
12987 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12989 #ifdef UA_ENABLE_TYPENAMES 12990 .typeName =
"SecurityTokenRequestType",
12996 .binaryEncodingId = 0,
12998 .members = SecurityTokenRequestType_members },
13001 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13003 #ifdef UA_ENABLE_TYPENAMES 13004 .typeName =
"DataChangeTrigger",
13010 .binaryEncodingId = 0,
13012 .members = DataChangeTrigger_members },
13015 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 338},
13017 #ifdef UA_ENABLE_TYPENAMES 13018 .typeName =
"BuildInfo",
13022 .fixedSize =
false,
13023 .overlayable =
false,
13024 .binaryEncodingId = 340,
13026 .members = BuildInfo_members },
13029 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13031 #ifdef UA_ENABLE_TYPENAMES 13032 .typeName =
"NodeClass",
13038 .binaryEncodingId = 0,
13040 .members = NodeClass_members },
13043 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 441},
13045 #ifdef UA_ENABLE_TYPENAMES 13046 .typeName =
"ChannelSecurityToken",
13052 .binaryEncodingId = 443,
13054 .members = ChannelSecurityToken_members },
13057 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 806},
13059 #ifdef UA_ENABLE_TYPENAMES 13060 .typeName =
"MonitoredItemNotification",
13064 .fixedSize =
false,
13065 .overlayable =
false,
13066 .binaryEncodingId = 808,
13068 .members = MonitoredItemNotification_members },
13071 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 382},
13073 #ifdef UA_ENABLE_TYPENAMES 13074 .typeName =
"DeleteNodesItem",
13078 .fixedSize =
false,
13079 .overlayable =
false,
13080 .binaryEncodingId = 384,
13082 .members = DeleteNodesItem_members },
13085 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 821},
13087 #ifdef UA_ENABLE_TYPENAMES 13088 .typeName =
"SubscriptionAcknowledgement",
13094 .binaryEncodingId = 823,
13096 .members = SubscriptionAcknowledgement_members },
13099 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 626},
13101 #ifdef UA_ENABLE_TYPENAMES 13102 .typeName =
"ReadValueId",
13106 .fixedSize =
false,
13107 .overlayable =
false,
13108 .binaryEncodingId = 628,
13110 .members = ReadValueId_members },
13113 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 370},
13115 #ifdef UA_ENABLE_TYPENAMES 13116 .typeName =
"DataTypeAttributes",
13120 .fixedSize =
false,
13121 .overlayable =
false,
13122 .binaryEncodingId = 372,
13124 .members = DataTypeAttributes_members },
13127 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 392},
13129 #ifdef UA_ENABLE_TYPENAMES 13130 .typeName =
"ResponseHeader",
13134 .fixedSize =
false,
13135 .overlayable =
false,
13136 .binaryEncodingId = 394,
13138 .members = ResponseHeader_members },
13141 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 845},
13143 #ifdef UA_ENABLE_TYPENAMES 13144 .typeName =
"DeleteSubscriptionsRequest",
13148 .fixedSize =
false,
13149 .overlayable =
false,
13150 .binaryEncodingId = 847,
13152 .members = DeleteSubscriptionsRequest_members },
13155 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 511},
13157 #ifdef UA_ENABLE_TYPENAMES 13158 .typeName =
"ViewDescription",
13162 .fixedSize =
false,
13163 .overlayable =
false,
13164 .binaryEncodingId = 513,
13166 .members = ViewDescription_members },
13169 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 782},
13171 #ifdef UA_ENABLE_TYPENAMES 13172 .typeName =
"DeleteMonitoredItemsResponse",
13176 .fixedSize =
false,
13177 .overlayable =
false,
13178 .binaryEncodingId = 784,
13180 .members = DeleteMonitoredItemsResponse_members },
13183 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 349},
13185 #ifdef UA_ENABLE_TYPENAMES 13186 .typeName =
"NodeAttributes",
13190 .fixedSize =
false,
13191 .overlayable =
false,
13192 .binaryEncodingId = 351,
13194 .members = NodeAttributes_members },
13197 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 558},
13199 #ifdef UA_ENABLE_TYPENAMES 13200 .typeName =
"RegisterNodesRequest",
13204 .fixedSize =
false,
13205 .overlayable =
false,
13206 .binaryEncodingId = 560,
13208 .members = RegisterNodesRequest_members },
13211 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 498},
13213 #ifdef UA_ENABLE_TYPENAMES 13214 .typeName =
"DeleteNodesRequest",
13218 .fixedSize =
false,
13219 .overlayable =
false,
13220 .binaryEncodingId = 500,
13222 .members = DeleteNodesRequest_members },
13225 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 827},
13227 #ifdef UA_ENABLE_TYPENAMES 13228 .typeName =
"PublishResponse",
13232 .fixedSize =
false,
13233 .overlayable =
false,
13234 .binaryEncodingId = 829,
13236 .members = PublishResponse_members },
13239 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 755},
13241 #ifdef UA_ENABLE_TYPENAMES 13242 .typeName =
"MonitoredItemModifyRequest",
13246 .fixedSize =
false,
13247 .overlayable =
false,
13248 .binaryEncodingId = 757,
13250 .members = MonitoredItemModifyRequest_members },
13253 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 322},
13255 #ifdef UA_ENABLE_TYPENAMES 13256 .typeName =
"UserNameIdentityToken",
13260 .fixedSize =
false,
13261 .overlayable =
false,
13262 .binaryEncodingId = 324,
13264 .members = UserNameIdentityToken_members },
13267 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13269 #ifdef UA_ENABLE_TYPENAMES 13270 .typeName =
"IdType",
13276 .binaryEncodingId = 0,
13278 .members = IdType_members },
13281 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13283 #ifdef UA_ENABLE_TYPENAMES 13284 .typeName =
"UserTokenType",
13290 .binaryEncodingId = 0,
13292 .members = UserTokenType_members },
13295 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 465},
13297 #ifdef UA_ENABLE_TYPENAMES 13298 .typeName =
"ActivateSessionRequest",
13302 .fixedSize =
false,
13303 .overlayable =
false,
13304 .binaryEncodingId = 467,
13306 .members = ActivateSessionRequest_members },
13309 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 447},
13311 #ifdef UA_ENABLE_TYPENAMES 13312 .typeName =
"OpenSecureChannelResponse",
13316 .fixedSize =
false,
13317 .overlayable =
false,
13318 .binaryEncodingId = 449,
13320 .members = OpenSecureChannelResponse_members },
13323 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13325 #ifdef UA_ENABLE_TYPENAMES 13326 .typeName =
"ApplicationType",
13332 .binaryEncodingId = 0,
13334 .members = ApplicationType_members },
13337 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13339 #ifdef UA_ENABLE_TYPENAMES 13340 .typeName =
"ServerState",
13346 .binaryEncodingId = 0,
13348 .members = ServerState_members },
13351 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 622},
13353 #ifdef UA_ENABLE_TYPENAMES 13354 .typeName =
"QueryNextResponse",
13358 .fixedSize =
false,
13359 .overlayable =
false,
13360 .binaryEncodingId = 624,
13362 .members = QueryNextResponse_members },
13365 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 468},
13367 #ifdef UA_ENABLE_TYPENAMES 13368 .typeName =
"ActivateSessionResponse",
13372 .fixedSize =
false,
13373 .overlayable =
false,
13374 .binaryEncodingId = 470,
13376 .members = ActivateSessionResponse_members },
13379 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13381 #ifdef UA_ENABLE_TYPENAMES 13382 .typeName =
"FilterOperator",
13388 .binaryEncodingId = 0,
13390 .members = FilterOperator_members },
13393 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 619},
13395 #ifdef UA_ENABLE_TYPENAMES 13396 .typeName =
"QueryNextRequest",
13400 .fixedSize =
false,
13401 .overlayable =
false,
13402 .binaryEncodingId = 621,
13404 .members = QueryNextRequest_members },
13407 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 674},
13409 #ifdef UA_ENABLE_TYPENAMES 13410 .typeName =
"WriteResponse",
13414 .fixedSize =
false,
13415 .overlayable =
false,
13416 .binaryEncodingId = 676,
13418 .members = WriteResponse_members },
13421 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 531},
13423 #ifdef UA_ENABLE_TYPENAMES 13424 .typeName =
"BrowseNextRequest",
13428 .fixedSize =
false,
13429 .overlayable =
false,
13430 .binaryEncodingId = 533,
13432 .members = BrowseNextRequest_members },
13435 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 785},
13437 #ifdef UA_ENABLE_TYPENAMES 13438 .typeName =
"CreateSubscriptionRequest",
13442 .fixedSize =
false,
13443 .overlayable =
false,
13444 .binaryEncodingId = 787,
13446 .members = CreateSubscriptionRequest_members },
13449 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 364},
13451 #ifdef UA_ENABLE_TYPENAMES 13452 .typeName =
"VariableTypeAttributes",
13456 .fixedSize =
false,
13457 .overlayable =
false,
13458 .binaryEncodingId = 366,
13460 .members = VariableTypeAttributes_members },
13463 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 549},
13465 #ifdef UA_ENABLE_TYPENAMES 13466 .typeName =
"BrowsePathResult",
13470 .fixedSize =
false,
13471 .overlayable =
false,
13472 .binaryEncodingId = 551,
13474 .members = BrowsePathResult_members },
13477 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 794},
13479 #ifdef UA_ENABLE_TYPENAMES 13480 .typeName =
"ModifySubscriptionResponse",
13484 .fixedSize =
false,
13485 .overlayable =
false,
13486 .binaryEncodingId = 796,
13488 .members = ModifySubscriptionResponse_members },
13491 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 444},
13493 #ifdef UA_ENABLE_TYPENAMES 13494 .typeName =
"OpenSecureChannelRequest",
13498 .fixedSize =
false,
13499 .overlayable =
false,
13500 .binaryEncodingId = 446,
13502 .members = OpenSecureChannelRequest_members },
13505 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 561},
13507 #ifdef UA_ENABLE_TYPENAMES 13508 .typeName =
"RegisterNodesResponse",
13512 .fixedSize =
false,
13513 .overlayable =
false,
13514 .binaryEncodingId = 563,
13516 .members = RegisterNodesResponse_members },
13519 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 471},
13521 #ifdef UA_ENABLE_TYPENAMES 13522 .typeName =
"CloseSessionRequest",
13526 .fixedSize =
false,
13527 .overlayable =
false,
13528 .binaryEncodingId = 473,
13530 .members = CloseSessionRequest_members },
13533 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 791},
13535 #ifdef UA_ENABLE_TYPENAMES 13536 .typeName =
"ModifySubscriptionRequest",
13540 .fixedSize =
false,
13541 .overlayable =
false,
13542 .binaryEncodingId = 793,
13544 .members = ModifySubscriptionRequest_members },
13547 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 304},
13549 #ifdef UA_ENABLE_TYPENAMES 13550 .typeName =
"UserTokenPolicy",
13554 .fixedSize =
false,
13555 .overlayable =
false,
13556 .binaryEncodingId = 306,
13558 .members = UserTokenPolicy_members },
13561 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 779},
13563 #ifdef UA_ENABLE_TYPENAMES 13564 .typeName =
"DeleteMonitoredItemsRequest",
13568 .fixedSize =
false,
13569 .overlayable =
false,
13570 .binaryEncodingId = 781,
13572 .members = DeleteMonitoredItemsRequest_members },
13575 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 367},
13577 #ifdef UA_ENABLE_TYPENAMES 13578 .typeName =
"ReferenceTypeAttributes",
13582 .fixedSize =
false,
13583 .overlayable =
false,
13584 .binaryEncodingId = 369,
13586 .members = ReferenceTypeAttributes_members },
13589 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 767},
13591 #ifdef UA_ENABLE_TYPENAMES 13592 .typeName =
"SetMonitoringModeRequest",
13596 .fixedSize =
false,
13597 .overlayable =
false,
13598 .binaryEncodingId = 769,
13600 .members = SetMonitoringModeRequest_members },
13603 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 567},
13605 #ifdef UA_ENABLE_TYPENAMES 13606 .typeName =
"UnregisterNodesResponse",
13610 .fixedSize =
false,
13611 .overlayable =
false,
13612 .binaryEncodingId = 569,
13614 .members = UnregisterNodesResponse_members },
13617 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 671},
13619 #ifdef UA_ENABLE_TYPENAMES 13620 .typeName =
"WriteRequest",
13624 .fixedSize =
false,
13625 .overlayable =
false,
13626 .binaryEncodingId = 673,
13628 .members = WriteRequest_members },
13631 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 352},
13633 #ifdef UA_ENABLE_TYPENAMES 13634 .typeName =
"ObjectAttributes",
13638 .fixedSize =
false,
13639 .overlayable =
false,
13640 .binaryEncodingId = 354,
13642 .members = ObjectAttributes_members },
13645 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 514},
13647 #ifdef UA_ENABLE_TYPENAMES 13648 .typeName =
"BrowseDescription",
13652 .fixedSize =
false,
13653 .overlayable =
false,
13654 .binaryEncodingId = 516,
13656 .members = BrowseDescription_members },
13659 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 830},
13661 #ifdef UA_ENABLE_TYPENAMES 13662 .typeName =
"RepublishRequest",
13666 .fixedSize =
false,
13667 .overlayable =
false,
13668 .binaryEncodingId = 832,
13670 .members = RepublishRequest_members },
13673 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 426},
13675 #ifdef UA_ENABLE_TYPENAMES 13676 .typeName =
"GetEndpointsRequest",
13680 .fixedSize =
false,
13681 .overlayable =
false,
13682 .binaryEncodingId = 428,
13684 .members = GetEndpointsRequest_members },
13687 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 824},
13689 #ifdef UA_ENABLE_TYPENAMES 13690 .typeName =
"PublishRequest",
13694 .fixedSize =
false,
13695 .overlayable =
false,
13696 .binaryEncodingId = 826,
13698 .members = PublishRequest_members },
13701 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 489},
13703 #ifdef UA_ENABLE_TYPENAMES 13704 .typeName =
"AddNodesResponse",
13708 .fixedSize =
false,
13709 .overlayable =
false,
13710 .binaryEncodingId = 491,
13712 .members = AddNodesResponse_members },
13715 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 809},
13717 #ifdef UA_ENABLE_TYPENAMES 13718 .typeName =
"DataChangeNotification",
13722 .fixedSize =
false,
13723 .overlayable =
false,
13724 .binaryEncodingId = 811,
13726 .members = DataChangeNotification_members },
13729 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 453},
13731 #ifdef UA_ENABLE_TYPENAMES 13732 .typeName =
"CloseSecureChannelResponse",
13736 .fixedSize =
false,
13737 .overlayable =
false,
13738 .binaryEncodingId = 455,
13740 .members = CloseSecureChannelResponse_members },
13743 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 761},
13745 #ifdef UA_ENABLE_TYPENAMES 13746 .typeName =
"ModifyMonitoredItemsRequest",
13750 .fixedSize =
false,
13751 .overlayable =
false,
13752 .binaryEncodingId = 763,
13754 .members = ModifyMonitoredItemsRequest_members },
13757 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 770},
13759 #ifdef UA_ENABLE_TYPENAMES 13760 .typeName =
"SetMonitoringModeResponse",
13764 .fixedSize =
false,
13765 .overlayable =
false,
13766 .binaryEncodingId = 772,
13768 .members = SetMonitoringModeResponse_members },
13771 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 420},
13773 #ifdef UA_ENABLE_TYPENAMES 13774 .typeName =
"FindServersRequest",
13778 .fixedSize =
false,
13779 .overlayable =
false,
13780 .binaryEncodingId = 422,
13782 .members = FindServersRequest_members },
13785 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 518},
13787 #ifdef UA_ENABLE_TYPENAMES 13788 .typeName =
"ReferenceDescription",
13792 .fixedSize =
false,
13793 .overlayable =
false,
13794 .binaryEncodingId = 520,
13796 .members = ReferenceDescription_members },
13799 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 800},
13801 #ifdef UA_ENABLE_TYPENAMES 13802 .typeName =
"SetPublishingModeResponse",
13806 .fixedSize =
false,
13807 .overlayable =
false,
13808 .binaryEncodingId = 802,
13810 .members = SetPublishingModeResponse_members },
13813 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 607},
13815 #ifdef UA_ENABLE_TYPENAMES 13816 .typeName =
"ContentFilterResult",
13820 .fixedSize =
false,
13821 .overlayable =
false,
13822 .binaryEncodingId = 609,
13824 .members = ContentFilterResult_members },
13827 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 379},
13829 #ifdef UA_ENABLE_TYPENAMES 13830 .typeName =
"AddReferencesItem",
13834 .fixedSize =
false,
13835 .overlayable =
false,
13836 .binaryEncodingId = 381,
13838 .members = AddReferencesItem_members },
13841 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 788},
13843 #ifdef UA_ENABLE_TYPENAMES 13844 .typeName =
"CreateSubscriptionResponse",
13848 .fixedSize =
false,
13849 .overlayable =
false,
13850 .binaryEncodingId = 790,
13852 .members = CreateSubscriptionResponse_members },
13855 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 848},
13857 #ifdef UA_ENABLE_TYPENAMES 13858 .typeName =
"DeleteSubscriptionsResponse",
13862 .fixedSize =
false,
13863 .overlayable =
false,
13864 .binaryEncodingId = 850,
13866 .members = DeleteSubscriptionsResponse_members },
13869 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 540},
13871 #ifdef UA_ENABLE_TYPENAMES 13872 .typeName =
"RelativePath",
13876 .fixedSize =
false,
13877 .overlayable =
false,
13878 .binaryEncodingId = 542,
13880 .members = RelativePath_members },
13883 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 507},
13885 #ifdef UA_ENABLE_TYPENAMES 13886 .typeName =
"DeleteReferencesResponse",
13890 .fixedSize =
false,
13891 .overlayable =
false,
13892 .binaryEncodingId = 509,
13894 .members = DeleteReferencesResponse_members },
13897 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 752},
13899 #ifdef UA_ENABLE_TYPENAMES 13900 .typeName =
"CreateMonitoredItemsResponse",
13904 .fixedSize =
false,
13905 .overlayable =
false,
13906 .binaryEncodingId = 754,
13908 .members = CreateMonitoredItemsResponse_members },
13911 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 713},
13913 #ifdef UA_ENABLE_TYPENAMES 13914 .typeName =
"CallResponse",
13918 .fixedSize =
false,
13919 .overlayable =
false,
13920 .binaryEncodingId = 715,
13922 .members = CallResponse_members },
13925 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 501},
13927 #ifdef UA_ENABLE_TYPENAMES 13928 .typeName =
"DeleteNodesResponse",
13932 .fixedSize =
false,
13933 .overlayable =
false,
13934 .binaryEncodingId = 503,
13936 .members = DeleteNodesResponse_members },
13939 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 833},
13941 #ifdef UA_ENABLE_TYPENAMES 13942 .typeName =
"RepublishResponse",
13946 .fixedSize =
false,
13947 .overlayable =
false,
13948 .binaryEncodingId = 835,
13950 .members = RepublishResponse_members },
13953 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 743},
13955 #ifdef UA_ENABLE_TYPENAMES 13956 .typeName =
"MonitoredItemCreateRequest",
13960 .fixedSize =
false,
13961 .overlayable =
false,
13962 .binaryEncodingId = 745,
13964 .members = MonitoredItemCreateRequest_members },
13967 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 504},
13969 #ifdef UA_ENABLE_TYPENAMES 13970 .typeName =
"DeleteReferencesRequest",
13974 .fixedSize =
false,
13975 .overlayable =
false,
13976 .binaryEncodingId = 506,
13978 .members = DeleteReferencesRequest_members },
13981 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 764},
13983 #ifdef UA_ENABLE_TYPENAMES 13984 .typeName =
"ModifyMonitoredItemsResponse",
13988 .fixedSize =
false,
13989 .overlayable =
false,
13990 .binaryEncodingId = 766,
13992 .members = ModifyMonitoredItemsResponse_members },
13995 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 632},
13997 #ifdef UA_ENABLE_TYPENAMES 13998 .typeName =
"ReadResponse",
14002 .fixedSize =
false,
14003 .overlayable =
false,
14004 .binaryEncodingId = 634,
14006 .members = ReadResponse_members },
14009 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 492},
14011 #ifdef UA_ENABLE_TYPENAMES 14012 .typeName =
"AddReferencesRequest",
14016 .fixedSize =
false,
14017 .overlayable =
false,
14018 .binaryEncodingId = 494,
14020 .members = AddReferencesRequest_members },
14023 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 629},
14025 #ifdef UA_ENABLE_TYPENAMES 14026 .typeName =
"ReadRequest",
14030 .fixedSize =
false,
14031 .overlayable =
false,
14032 .binaryEncodingId = 631,
14034 .members = ReadRequest_members },
14037 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 376},
14039 #ifdef UA_ENABLE_TYPENAMES 14040 .typeName =
"AddNodesItem",
14044 .fixedSize =
false,
14045 .overlayable =
false,
14046 .binaryEncodingId = 378,
14048 .members = AddNodesItem_members },
14051 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 862},
14053 #ifdef UA_ENABLE_TYPENAMES 14054 .typeName =
"ServerStatusDataType",
14058 .fixedSize =
false,
14059 .overlayable =
false,
14060 .binaryEncodingId = 864,
14062 .members = ServerStatusDataType_members },
14065 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 495},
14067 #ifdef UA_ENABLE_TYPENAMES 14068 .typeName =
"AddReferencesResponse",
14072 .fixedSize =
false,
14073 .overlayable =
false,
14074 .binaryEncodingId = 497,
14076 .members = AddReferencesResponse_members },
14079 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 555},
14081 #ifdef UA_ENABLE_TYPENAMES 14082 .typeName =
"TranslateBrowsePathsToNodeIdsResponse",
14086 .fixedSize =
false,
14087 .overlayable =
false,
14088 .binaryEncodingId = 557,
14090 .members = TranslateBrowsePathsToNodeIdsResponse_members },
14093 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 722},
14095 #ifdef UA_ENABLE_TYPENAMES 14096 .typeName =
"DataChangeFilter",
14102 .binaryEncodingId = 724,
14104 .members = DataChangeFilter_members },
14107 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 583},
14109 #ifdef UA_ENABLE_TYPENAMES 14110 .typeName =
"ContentFilterElement",
14114 .fixedSize =
false,
14115 .overlayable =
false,
14116 .binaryEncodingId = 585,
14118 .members = ContentFilterElement_members },
14121 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 474},
14123 #ifdef UA_ENABLE_TYPENAMES 14124 .typeName =
"CloseSessionResponse",
14128 .fixedSize =
false,
14129 .overlayable =
false,
14130 .binaryEncodingId = 476,
14132 .members = CloseSessionResponse_members },
14135 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 308},
14137 #ifdef UA_ENABLE_TYPENAMES 14138 .typeName =
"ApplicationDescription",
14142 .fixedSize =
false,
14143 .overlayable =
false,
14144 .binaryEncodingId = 310,
14146 .members = ApplicationDescription_members },
14149 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 395},
14151 #ifdef UA_ENABLE_TYPENAMES 14152 .typeName =
"ServiceFault",
14156 .fixedSize =
false,
14157 .overlayable =
false,
14158 .binaryEncodingId = 397,
14160 .members = ServiceFault_members },
14163 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 423},
14165 #ifdef UA_ENABLE_TYPENAMES 14166 .typeName =
"FindServersResponse",
14170 .fixedSize =
false,
14171 .overlayable =
false,
14172 .binaryEncodingId = 425,
14174 .members = FindServersResponse_members },
14177 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 749},
14179 #ifdef UA_ENABLE_TYPENAMES 14180 .typeName =
"CreateMonitoredItemsRequest",
14184 .fixedSize =
false,
14185 .overlayable =
false,
14186 .binaryEncodingId = 751,
14188 .members = CreateMonitoredItemsRequest_members },
14191 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 586},
14193 #ifdef UA_ENABLE_TYPENAMES 14194 .typeName =
"ContentFilter",
14198 .fixedSize =
false,
14199 .overlayable =
false,
14200 .binaryEncodingId = 588,
14202 .members = ContentFilter_members },
14205 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 616},
14207 #ifdef UA_ENABLE_TYPENAMES 14208 .typeName =
"QueryFirstResponse",
14212 .fixedSize =
false,
14213 .overlayable =
false,
14214 .binaryEncodingId = 618,
14216 .members = QueryFirstResponse_members },
14219 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 486},
14221 #ifdef UA_ENABLE_TYPENAMES 14222 .typeName =
"AddNodesRequest",
14226 .fixedSize =
false,
14227 .overlayable =
false,
14228 .binaryEncodingId = 488,
14230 .members = AddNodesRequest_members },
14233 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 525},
14235 #ifdef UA_ENABLE_TYPENAMES 14236 .typeName =
"BrowseRequest",
14240 .fixedSize =
false,
14241 .overlayable =
false,
14242 .binaryEncodingId = 527,
14244 .members = BrowseRequest_members },
14247 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 543},
14249 #ifdef UA_ENABLE_TYPENAMES 14250 .typeName =
"BrowsePath",
14254 .fixedSize =
false,
14255 .overlayable =
false,
14256 .binaryEncodingId = 545,
14258 .members = BrowsePath_members },
14261 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 522},
14263 #ifdef UA_ENABLE_TYPENAMES 14264 .typeName =
"BrowseResult",
14268 .fixedSize =
false,
14269 .overlayable =
false,
14270 .binaryEncodingId = 524,
14272 .members = BrowseResult_members },
14275 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 459},
14277 #ifdef UA_ENABLE_TYPENAMES 14278 .typeName =
"CreateSessionRequest",
14282 .fixedSize =
false,
14283 .overlayable =
false,
14284 .binaryEncodingId = 461,
14286 .members = CreateSessionRequest_members },
14289 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 570},
14291 #ifdef UA_ENABLE_TYPENAMES 14292 .typeName =
"QueryDataDescription",
14296 .fixedSize =
false,
14297 .overlayable =
false,
14298 .binaryEncodingId = 572,
14300 .members = QueryDataDescription_members },
14303 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 312},
14305 #ifdef UA_ENABLE_TYPENAMES 14306 .typeName =
"EndpointDescription",
14310 .fixedSize =
false,
14311 .overlayable =
false,
14312 .binaryEncodingId = 314,
14314 .members = EndpointDescription_members },
14317 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 429},
14319 #ifdef UA_ENABLE_TYPENAMES 14320 .typeName =
"GetEndpointsResponse",
14324 .fixedSize =
false,
14325 .overlayable =
false,
14326 .binaryEncodingId = 431,
14328 .members = GetEndpointsResponse_members },
14331 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 573},
14333 #ifdef UA_ENABLE_TYPENAMES 14334 .typeName =
"NodeTypeDescription",
14338 .fixedSize =
false,
14339 .overlayable =
false,
14340 .binaryEncodingId = 575,
14342 .members = NodeTypeDescription_members },
14345 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 534},
14347 #ifdef UA_ENABLE_TYPENAMES 14348 .typeName =
"BrowseNextResponse",
14352 .fixedSize =
false,
14353 .overlayable =
false,
14354 .binaryEncodingId = 536,
14356 .members = BrowseNextResponse_members },
14359 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 552},
14361 #ifdef UA_ENABLE_TYPENAMES 14362 .typeName =
"TranslateBrowsePathsToNodeIdsRequest",
14366 .fixedSize =
false,
14367 .overlayable =
false,
14368 .binaryEncodingId = 554,
14370 .members = TranslateBrowsePathsToNodeIdsRequest_members },
14373 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 528},
14375 #ifdef UA_ENABLE_TYPENAMES 14376 .typeName =
"BrowseResponse",
14380 .fixedSize =
false,
14381 .overlayable =
false,
14382 .binaryEncodingId = 530,
14384 .members = BrowseResponse_members },
14387 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 462},
14389 #ifdef UA_ENABLE_TYPENAMES 14390 .typeName =
"CreateSessionResponse",
14394 .fixedSize =
false,
14395 .overlayable =
false,
14396 .binaryEncodingId = 464,
14398 .members = CreateSessionResponse_members },
14401 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 613},
14403 #ifdef UA_ENABLE_TYPENAMES 14404 .typeName =
"QueryFirstRequest",
14408 .fixedSize =
false,
14409 .overlayable =
false,
14410 .binaryEncodingId = 615,
14412 .members = QueryFirstRequest_members },
14425 #ifdef UA_ENABLE_TYPENAMES 14426 .memberName =
"error",
14428 .namespaceZero =
true,
14433 #ifdef UA_ENABLE_TYPENAMES 14434 .memberName =
"reason",
14436 .namespaceZero =
true,
14444 #ifdef UA_ENABLE_TYPENAMES 14445 .memberName =
"padding",
14447 .namespaceZero =
true,
14452 #ifdef UA_ENABLE_TYPENAMES 14453 .memberName =
"signature",
14455 .namespaceZero =
true,
14463 #ifdef UA_ENABLE_TYPENAMES 14464 .memberName =
"protocolVersion",
14466 .namespaceZero =
true,
14471 #ifdef UA_ENABLE_TYPENAMES 14472 .memberName =
"receiveBufferSize",
14474 .namespaceZero =
true,
14479 #ifdef UA_ENABLE_TYPENAMES 14480 .memberName =
"sendBufferSize",
14482 .namespaceZero =
true,
14487 #ifdef UA_ENABLE_TYPENAMES 14488 .memberName =
"maxMessageSize",
14490 .namespaceZero =
true,
14495 #ifdef UA_ENABLE_TYPENAMES 14496 .memberName =
"maxChunkCount",
14498 .namespaceZero =
true,
14503 #ifdef UA_ENABLE_TYPENAMES 14504 .memberName =
"endpointUrl",
14506 .namespaceZero =
true,
14514 #ifdef UA_ENABLE_TYPENAMES 14515 .memberName =
"error",
14517 .namespaceZero =
true,
14522 #ifdef UA_ENABLE_TYPENAMES 14523 .memberName =
"reason",
14525 .namespaceZero =
true,
14533 #ifdef UA_ENABLE_TYPENAMES 14536 .namespaceZero =
true,
14544 #ifdef UA_ENABLE_TYPENAMES 14545 .memberName =
"securityPolicyUri",
14547 .namespaceZero =
true,
14552 #ifdef UA_ENABLE_TYPENAMES 14553 .memberName =
"senderCertificate",
14555 .namespaceZero =
true,
14560 #ifdef UA_ENABLE_TYPENAMES 14561 .memberName =
"receiverCertificateThumbprint",
14563 .namespaceZero =
true,
14571 #ifdef UA_ENABLE_TYPENAMES 14572 .memberName =
"protocolVersion",
14574 .namespaceZero =
true,
14579 #ifdef UA_ENABLE_TYPENAMES 14580 .memberName =
"receiveBufferSize",
14582 .namespaceZero =
true,
14587 #ifdef UA_ENABLE_TYPENAMES 14588 .memberName =
"sendBufferSize",
14590 .namespaceZero =
true,
14595 #ifdef UA_ENABLE_TYPENAMES 14596 .memberName =
"maxMessageSize",
14598 .namespaceZero =
true,
14603 #ifdef UA_ENABLE_TYPENAMES 14604 .memberName =
"maxChunkCount",
14606 .namespaceZero =
true,
14614 #ifdef UA_ENABLE_TYPENAMES 14615 .memberName =
"sequenceNumber",
14617 .namespaceZero =
true,
14622 #ifdef UA_ENABLE_TYPENAMES 14623 .memberName =
"requestId",
14625 .namespaceZero =
true,
14633 #ifdef UA_ENABLE_TYPENAMES 14634 .memberName =
"messageTypeAndChunkType",
14636 .namespaceZero =
true,
14641 #ifdef UA_ENABLE_TYPENAMES 14642 .memberName =
"messageSize",
14644 .namespaceZero =
true,
14652 #ifdef UA_ENABLE_TYPENAMES 14655 .namespaceZero =
true,
14663 #ifdef UA_ENABLE_TYPENAMES 14664 .memberName =
"tokenId",
14666 .namespaceZero =
true,
14674 #ifdef UA_ENABLE_TYPENAMES 14675 .memberName =
"messageHeader",
14677 .namespaceZero =
false,
14682 #ifdef UA_ENABLE_TYPENAMES 14683 .memberName =
"secureChannelId",
14685 .namespaceZero =
true,
14694 #ifdef UA_ENABLE_TYPENAMES 14695 .typeName =
"SecureConversationMessageAbortBody",
14699 .fixedSize =
false,
14700 .overlayable =
false,
14701 .binaryEncodingId = 0,
14703 .members = SecureConversationMessageAbortBody_members },
14706 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14708 #ifdef UA_ENABLE_TYPENAMES 14709 .typeName =
"SecureConversationMessageFooter",
14713 .fixedSize =
false,
14714 .overlayable =
false,
14715 .binaryEncodingId = 0,
14717 .members = SecureConversationMessageFooter_members },
14720 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14722 #ifdef UA_ENABLE_TYPENAMES 14723 .typeName =
"TcpHelloMessage",
14727 .fixedSize =
false,
14728 .overlayable =
false,
14729 .binaryEncodingId = 0,
14731 .members = TcpHelloMessage_members },
14734 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14736 #ifdef UA_ENABLE_TYPENAMES 14737 .typeName =
"TcpErrorMessage",
14741 .fixedSize =
false,
14742 .overlayable =
false,
14743 .binaryEncodingId = 0,
14745 .members = TcpErrorMessage_members },
14748 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14750 #ifdef UA_ENABLE_TYPENAMES 14751 .typeName =
"MessageType",
14757 .binaryEncodingId = 0,
14759 .members = MessageType_members },
14762 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14764 #ifdef UA_ENABLE_TYPENAMES 14765 .typeName =
"AsymmetricAlgorithmSecurityHeader",
14769 .fixedSize =
false,
14770 .overlayable =
false,
14771 .binaryEncodingId = 0,
14773 .members = AsymmetricAlgorithmSecurityHeader_members },
14776 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14778 #ifdef UA_ENABLE_TYPENAMES 14779 .typeName =
"TcpAcknowledgeMessage",
14785 .binaryEncodingId = 0,
14787 .members = TcpAcknowledgeMessage_members },
14790 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14792 #ifdef UA_ENABLE_TYPENAMES 14793 .typeName =
"SequenceHeader",
14799 .binaryEncodingId = 0,
14801 .members = SequenceHeader_members },
14804 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14806 #ifdef UA_ENABLE_TYPENAMES 14807 .typeName =
"TcpMessageHeader",
14813 .binaryEncodingId = 0,
14815 .members = TcpMessageHeader_members },
14818 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14820 #ifdef UA_ENABLE_TYPENAMES 14821 .typeName =
"ChunkType",
14827 .binaryEncodingId = 0,
14829 .members = ChunkType_members },
14832 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14834 #ifdef UA_ENABLE_TYPENAMES 14835 .typeName =
"SymmetricAlgorithmSecurityHeader",
14841 .binaryEncodingId = 0,
14843 .members = SymmetricAlgorithmSecurityHeader_members },
14846 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14848 #ifdef UA_ENABLE_TYPENAMES 14849 .typeName =
"SecureConversationMessageHeader",
14855 .binaryEncodingId = 0,
14857 .members = SecureConversationMessageHeader_members },
14888 message->
data = data;
14889 message->
length = length;
14895 size_t complete_until = 0;
14897 while(message->
length - complete_until >= 8) {
14902 if(msgtype != (
'M' + (
'S' << 8) + (
'G' << 16)) &&
14903 msgtype != (
'E' + (
'R' << 8) + (
'R' << 16)) &&
14904 msgtype != (
'O' + (
'P' << 8) + (
'N' << 16)) &&
14905 msgtype != (
'H' + (
'E' << 8) + (
'L' << 16)) &&
14906 msgtype != (
'A' + (
'C' << 8) + (
'K' << 16)) &&
14907 msgtype != (
'C' + (
'L' << 8) + (
'O' << 16))) {
14908 garbage_end =
true;
14914 size_t length_pos = complete_until + 4;
14915 UA_StatusCode decode_retval = UA_UInt32_decodeBinary(message, &length_pos, &chunk_length);
14919 chunk_length < 16 ||
14921 garbage_end =
true;
14926 if(chunk_length + complete_until > message->
length)
14929 complete_until += chunk_length;
14933 if(complete_until != message->
length) {
14936 if(complete_until == 0)
14938 message->
length = complete_until;
14943 if(complete_until == 0) {
14959 size_t incomplete_length = message->
length - complete_until;
14964 &message->
data[complete_until], incomplete_length);
14965 message->
length = complete_until;
14982 *realloced =
false;
14987 retval = connection->
recv(connection, chunks, timeout);
15009 UA_atomic_cmpxchg((
void**)&channel->
connection, connection,
NULL);
15010 UA_atomic_xchg((
void**)&connection->
channel,
NULL);
15018 UA_atomic_xchg((
void**)&connection->
channel, (
void*)channel);
15023 const char ** port,
const char **path) {
15024 if (!endpointUrl || !hostname)
15027 size_t urlLength = strlen(endpointUrl);
15028 if(urlLength < 10 || urlLength >= 256)
15031 if(strncmp(endpointUrl,
"opc.tcp://", 10) != 0)
15034 if (urlLength == 10) {
15035 hostname[0] =
'\0';
15041 size_t portpos = 10;
15044 UA_Boolean ip6_end_found = endpointUrl[portpos] !=
'[';
15045 for(; portpos < urlLength; ++portpos) {
15046 if (!ip6_end_found) {
15047 if (endpointUrl[portpos] ==
']')
15052 if(endpointUrl[portpos] ==
':' || endpointUrl[portpos] ==
'/')
15056 memcpy(hostname, &endpointUrl[10], portpos - 10);
15057 hostname[portpos-10] = 0;
15060 if (portpos < urlLength - 1) {
15061 if (endpointUrl[portpos] ==
'/')
15064 *port = &endpointUrl[portpos + 1];
15071 size_t pathpos = portpos < urlLength ? portpos : 10;
15072 for(; pathpos < urlLength; ++pathpos) {
15073 if(endpointUrl[pathpos] ==
'/')
15076 if (pathpos < urlLength-1)
15077 *path = &endpointUrl[pathpos+1];
15088 UA_UInt16 * port,
const char ** path) {
15089 const char* portTmp =
NULL;
15090 const char* pathTmp =
NULL;
15094 hostname[0] =
'\0';
15105 portLen = (size_t)(pathTmp-portTmp-1);
15107 portLen = strlen(portTmp);
15112 memcpy(portStr, portTmp, portLen);
15113 portStr[portLen]=
'\0';
15116 for (
size_t i=0; i<6; ++i) {
15117 if (portStr[i] == 0)
15119 if (portStr[i] <
'0' || portStr[i] >
'9')
15142 size_t progress = 0;
15144 while(progress < buflen) {
15146 if(
'0' > c ||
'9' < c)
15162 #define UA_SECURE_MESSAGE_HEADER_LENGTH 24 15174 UA_ByteString_deleteMembers(&channel->
serverNonce);
15176 UA_ByteString_deleteMembers(&channel->
clientNonce);
15177 UA_ChannelSecurityToken_deleteMembers(&channel->
securityToken);
15188 se->session->channel =
NULL;
15196 UA_ByteString_deleteMembers(&ch->bytes);
15207 nonce->
data[0] =
'a';
15211 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15212 #pragma GCC diagnostic push 15213 #pragma GCC diagnostic ignored "-Wextra" 15214 #pragma GCC diagnostic ignored "-Wcast-qual" 15215 #pragma GCC diagnostic ignored "-Wunused-value" 15222 se->session = session;
15223 if(UA_atomic_cmpxchg((
void**)&session->
channel,
NULL, channel) !=
NULL) {
15230 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15231 #pragma GCC diagnostic pop 15239 if(se->session == session)
15256 return se->session;
15306 UA_String_init(&errorMsg);
15308 UA_UInt32_encodeBinary(&ci->
errorCode, dst, &offset);
15309 UA_String_encodeBinary(&errorMsg, dst, &offset);
15320 size_t offset_header = 0;
15321 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, dst, &offset_header);
15322 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symSecHeader, dst, &offset_header);
15323 UA_SequenceHeader_encodeBinary(&seqHeader, dst, &offset_header);
15346 const void *content,
const UA_DataType *contentType) {
15363 size_t messagePos = 0;
15366 UA_NodeId_encodeBinary(&typeId, &message, &messagePos);
15383 &ci, &message, &messagePos);
15390 UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15397 return UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15408 if(ch->requestId == requestId) {
15409 UA_ByteString_deleteMembers(&ch->bytes);
15420 size_t offset,
size_t chunklength) {
15421 UA_Byte* new_bytes =
UA_realloc(ch->bytes.data, ch->bytes.length + chunklength);
15423 UA_ByteString_deleteMembers(&ch->bytes);
15426 ch->bytes.data = new_bytes;
15427 memcpy(&ch->bytes.data[ch->bytes.length], &msg->
data[offset], chunklength);
15428 ch->bytes.length += chunklength;
15434 size_t chunklength) {
15436 if(msg->
length - offset < chunklength) {
15438 UA_SecureChannel_removeChunk(channel, requestId);
15445 if(ch->requestId == requestId)
15454 ch->requestId = requestId;
15455 UA_ByteString_init(&ch->bytes);
15459 appendChunk(ch, msg, offset, chunklength);
15465 size_t chunklength,
UA_Boolean *deleteChunk) {
15466 if(msg->
length - offset < chunklength) {
15468 UA_SecureChannel_removeChunk(channel, requestId);
15474 if(ch->requestId == requestId)
15480 *deleteChunk =
false;
15481 bytes.
length = chunklength;
15484 *deleteChunk =
true;
15485 appendChunk(ch, msg, offset, chunklength);
15513 if (chunks->
length > 3 && chunks->
data[offset] ==
'E' &&
15514 chunks->
data[offset+1] ==
'R' && chunks->
data[offset+2] ==
'R') {
15516 retval = UA_TcpMessageHeader_decodeBinary(chunks, &offset, &header);
15521 retval = UA_TcpErrorMessage_decodeBinary(chunks, &offset, &errorMessage);
15530 size_t initial_offset = offset;
15534 retval = UA_SecureConversationMessageHeader_decodeBinary(chunks, &offset, &header);
15547 UA_SequenceHeader_init(&sequenceHeader);
15552 retval |= UA_UInt32_decodeBinary(chunks, &offset, &tokenId);
15553 retval |= UA_SequenceHeader_decodeBinary(chunks, &offset, &sequenceHeader);
15565 retval = UA_SecureChannel_processSequenceNumber(channel, sequenceHeader.
sequenceNumber);
15571 size_t processed_header = offset - initial_offset;
15574 UA_SecureChannel_appendChunk(channel, sequenceHeader.
requestId, chunks, offset,
15580 UA_SecureChannel_finalizeChunk(channel, sequenceHeader.
requestId, chunks, offset,
15583 if(message.
length > 0) {
15587 UA_ByteString_deleteMembers(&message);
15591 UA_SecureChannel_removeChunk(channel, sequenceHeader.
requestId);
15599 }
while(chunks->
length > offset);
15610 #ifdef UA_ENABLE_SUBSCRIPTIONS 15613 UA_Session adminSession = {
15615 .applicationName = {.locale = {0,
NULL}, .text = {0,
NULL}},
15617 .gatewayServerUri = {0,
NULL}, .discoveryProfileUri = {0,
NULL},
15618 .discoveryUrlsSize = 0, .discoveryUrls =
NULL},
15619 .sessionName = {
sizeof(
"Administrator Session")-1, (
UA_Byte*)
"Administrator Session"},
15621 .identifier.numeric = 1},
15622 .sessionId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
15625 .continuationPoints = {
NULL}};
15639 LIST_INIT(&session->continuationPoints);
15640 #ifdef UA_ENABLE_SUBSCRIPTIONS 15641 LIST_INIT(&session->serverSubscriptions);
15642 session->lastSubscriptionID = 0;
15650 UA_NodeId_deleteMembers(&session->
sessionId);
15655 UA_ByteString_deleteMembers(&cp->identifier);
15656 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
15661 #ifdef UA_ENABLE_SUBSCRIPTIONS 15668 UA_PublishResponseEntry *entry;
15671 UA_PublishResponse_deleteMembers(&entry->response);
15682 #ifdef UA_ENABLE_SUBSCRIPTIONS 15684 void UA_Session_addSubscription(UA_Session *session,
UA_Subscription *newSubscription) {
15685 LIST_INSERT_HEAD(&session->serverSubscriptions, newSubscription, listEntry);
15689 UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
15691 UA_Subscription *sub = UA_Session_getSubscriptionByID(session, subscriptionID);
15701 UA_Session_getSubscriptionByID(UA_Session *session,
UA_UInt32 subscriptionID) {
15703 LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
15704 if(sub->subscriptionID == subscriptionID)
15710 UA_UInt32 UA_Session_getUniqueSubscriptionID(UA_Session *session) {
15711 return ++(session->lastSubscriptionID);
15723 #ifdef UA_ENABLE_GENERATE_NAMESPACE0 15726 #ifdef UA_ENABLE_SUBSCRIPTIONS 15729 #if defined(UA_ENABLE_MULTITHREADING) && !defined(NDEBUG) 15733 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 15737 static const UA_NodeId nodeIdHasSubType = {
15740 static const UA_NodeId nodeIdHasComponent = {
15743 static const UA_NodeId nodeIdHasProperty = {
15746 static const UA_NodeId nodeIdOrganizes = {
15750 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 15751 static const UA_NodeId nodeIdNonHierarchicalReferences = {
15783 .data = (
UA_Byte*)(uintptr_t)name};
15803 size_t refssize = parent->referencesSize;
15811 for(
size_t i = parent->referencesSize; i > 0; --i) {
15823 addNodeInternal(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15826 UA_AddNodesResult_init(&res);
15829 &referenceTypeId, &UA_NODEID_NULL,
15836 addNodeInternalWithType(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15839 UA_AddNodesResult_init(&res);
15842 &referenceTypeId, &typeIdentifier,
15850 deleteInstanceChildren(UA_Server *server,
UA_NodeId *objectNodeId) {
15853 UA_BrowseDescription_init(&bDes);
15854 bDes.
nodeId = *objectNodeId;
15867 true, rd->
nodeId,
true);
15871 UA_BrowseResult_deleteMembers(&bRes);
15893 #ifdef UA_ENABLE_MULTITHREADING 15894 pthread_cond_destroy(&server->dispatchQueue_condition);
15895 pthread_mutex_destroy(&server->dispatchQueue_mutex);
15901 static void UA_Server_cleanup(UA_Server *server,
void *_) {
15916 UA_Server *server = (UA_Server*)handle;
15922 UA_BuildInfo_copy(&server->config.buildInfo, &retval->
buildInfo);
15930 if(sourceTimeStamp) {
15949 UA_Byte *byte = UA_Byte_new();
15955 if(sourceTimeStamp) {
15980 if(sourceTimeStamp) {
15995 UA_Server *server = (UA_Server*)handle;
16002 if(sourceTimestamp) {
16012 UA_Server *server = (UA_Server*)handle;
16030 if(newNamespacesSize <= server->namespacesSize)
16040 for(
size_t i = server->
namespacesSize; i < newNamespacesSize; ++i)
16059 if(sourceTimeStamp) {
16066 static void copyNames(UA_Node *node,
char *name) {
16067 node->browseName = UA_QUALIFIEDNAME_ALLOC(0, name);
16068 node->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16069 node->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16073 addDataTypeNode(UA_Server *server,
char* name,
UA_UInt32 datatypeid,
16076 copyNames((UA_Node*)datatype, name);
16077 datatype->nodeId.identifier.numeric = datatypeid;
16079 addNodeInternal(server, (UA_Node*)datatype,
16080 UA_NODEID_NUMERIC(0, parent), nodeIdHasSubType);
16084 addObjectTypeNode(UA_Server *server,
char* name,
UA_UInt32 objecttypeid,
16087 copyNames((UA_Node*)objecttype, name);
16088 objecttype->nodeId.identifier.numeric = objecttypeid;
16089 addNodeInternal(server, (UA_Node*)objecttype, UA_NODEID_NUMERIC(0, parent),
16090 UA_NODEID_NUMERIC(0, parentreference));
16094 createVariableTypeNode(UA_Server *server,
char* name,
UA_UInt32 variabletypeid,
16097 copyNames((UA_Node*)variabletype, name);
16098 variabletype->nodeId.identifier.numeric = variabletypeid;
16100 return variabletype;
16103 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16105 GetMonitoredItems(
void *handle,
const UA_NodeId objectId,
size_t inputSize,
16108 UA_Session* session = methodCallSession;
16109 UA_Subscription* subscription = UA_Session_getSubscriptionByID(session, subscriptionId);
16115 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16118 if(sizeOfOutput==0)
16124 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16125 clientHandles[i] = monitoredItem->clientHandle;
16126 serverHandles[i] = monitoredItem->itemId;
16129 UA_Variant_setArray(&output[0], clientHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16130 UA_Variant_setArray(&output[1], serverHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16136 UA_Server *server =
UA_calloc(1,
sizeof(UA_Server));
16140 server->config = config;
16144 #ifdef UA_ENABLE_MULTITHREADING 16146 cds_wfcq_init(&server->dispatchQueue_head, &server->dispatchQueue_tail);
16147 cds_lfs_init(&server->mainLoopJobs);
16152 #ifndef UA_ENABLE_DETERMINISTIC_RNG 16159 UA_String_copy(&server->config.applicationDescription.applicationUri, &server->
namespaces[1]);
16166 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
16172 UA_STRING_ALLOC(
"http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary");
16174 size_t policies = 0;
16175 if(server->config.enableAnonymousLogin)
16177 if(server->config.enableUsernamePasswordLogin)
16182 size_t currentIndex = 0;
16183 if(server->config.enableAnonymousLogin) {
16189 if(server->config.enableUsernamePasswordLogin) {
16198 UA_String_copy(&server->config.serverCertificate, &endpoint->
serverCertificate);
16199 UA_ApplicationDescription_copy(&server->config.applicationDescription, &endpoint->
server);
16208 UA_Job cleanup = {.
type = UA_JOBTYPE_METHODCALL,
16214 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 16221 copyNames((UA_Node*)references,
"References");
16225 references->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"References");
16228 copyNames((UA_Node*)hassubtype,
"HasSubtype");
16229 hassubtype->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HasSupertype");
16240 copyNames((UA_Node*)hierarchicalreferences,
"HierarchicalReferences");
16243 hierarchicalreferences->
symmetric =
false;
16244 addNodeInternal(server, (UA_Node*)hierarchicalreferences,
16248 copyNames((UA_Node*)nonhierarchicalreferences,
"NonHierarchicalReferences");
16250 nonhierarchicalreferences->
isAbstract =
true;
16251 nonhierarchicalreferences->
symmetric =
false;
16252 addNodeInternal(server, (UA_Node*)nonhierarchicalreferences,
16256 copyNames((UA_Node*)haschild,
"HasChild");
16260 addNodeInternal(server, (UA_Node*)haschild,
16264 copyNames((UA_Node*)organizes,
"Organizes");
16265 organizes->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrganizedBy");
16269 addNodeInternal(server, (UA_Node*)organizes,
16273 copyNames((UA_Node*)haseventsource,
"HasEventSource");
16274 haseventsource->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EventSourceOf");
16278 addNodeInternal(server, (UA_Node*)haseventsource,
16282 copyNames((UA_Node*)hasmodellingrule,
"HasModellingRule");
16283 hasmodellingrule->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModellingRuleOf");
16287 addNodeInternal(server, (UA_Node*)hasmodellingrule, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16290 copyNames((UA_Node*)hasencoding,
"HasEncoding");
16291 hasencoding->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EncodingOf");
16295 addNodeInternal(server, (UA_Node*)hasencoding, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16298 copyNames((UA_Node*)hasdescription,
"HasDescription");
16299 hasdescription->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"DescriptionOf");
16303 addNodeInternal(server, (UA_Node*)hasdescription, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16306 copyNames((UA_Node*)hastypedefinition,
"HasTypeDefinition");
16307 hastypedefinition->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"TypeDefinitionOf");
16311 addNodeInternal(server, (UA_Node*)hastypedefinition, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16314 copyNames((UA_Node*)generatesevent,
"GeneratesEvent");
16315 generatesevent->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"GeneratedBy");
16319 addNodeInternal(server, (UA_Node*)generatesevent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16322 copyNames((UA_Node*)aggregates,
"Aggregates");
16323 aggregates->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"AggregatedBy");
16327 addNodeInternal(server, (UA_Node*)aggregates, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCHILD), nodeIdHasSubType);
16334 copyNames((UA_Node*)hasproperty,
"HasProperty");
16335 hasproperty->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"PropertyOf");
16339 addNodeInternal(server, (UA_Node*)hasproperty,
16343 copyNames((UA_Node*)hascomponent,
"HasComponent");
16344 hascomponent->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ComponentOf");
16348 addNodeInternal(server, (UA_Node*)hascomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16351 copyNames((UA_Node*)hasnotifier,
"HasNotifier");
16352 hasnotifier->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"NotifierOf");
16356 addNodeInternal(server, (UA_Node*)hasnotifier, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASEVENTSOURCE), nodeIdHasSubType);
16359 copyNames((UA_Node*)hasorderedcomponent,
"HasOrderedComponent");
16360 hasorderedcomponent->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrderedComponentOf");
16363 hasorderedcomponent->
symmetric =
false;
16364 addNodeInternal(server, (UA_Node*)hasorderedcomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCOMPONENT), nodeIdHasSubType);
16367 copyNames((UA_Node*)hasmodelparent,
"HasModelParent");
16368 hasmodelparent->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModelParentOf");
16372 addNodeInternal(server, (UA_Node*)hasmodelparent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16375 copyNames((UA_Node*)fromstate,
"FromState");
16376 fromstate->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ToTransition");
16380 addNodeInternal(server, (UA_Node*)fromstate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16383 copyNames((UA_Node*)tostate,
"ToState");
16384 tostate->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"FromTransition");
16388 addNodeInternal(server, (UA_Node*)tostate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16391 copyNames((UA_Node*)hascause,
"HasCause");
16392 hascause->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeCausedBy");
16396 addNodeInternal(server, (UA_Node*)hascause, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16399 copyNames((UA_Node*)haseffect,
"HasEffect");
16400 haseffect->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeEffectedBy");
16404 addNodeInternal(server, (UA_Node*)haseffect, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16407 copyNames((UA_Node*)hashistoricalconfiguration,
"HasHistoricalConfiguration");
16408 hashistoricalconfiguration->
inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HistoricalConfigurationOf");
16410 hashistoricalconfiguration->
isAbstract =
false;
16411 hashistoricalconfiguration->
symmetric =
false;
16412 addNodeInternal(server, (UA_Node*)hashistoricalconfiguration, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16419 copyNames((UA_Node*)basedatatype,
"BaseDataType");
16464 basevartype->valueRank = -2;
16472 basedatavartype->valueRank = -2;
16474 addNodeInternalWithType(server, (UA_Node*)basedatavartype,
16480 propertytype->valueRank = -2;
16482 addNodeInternalWithType(server, (UA_Node*)propertytype,
16488 buildinfotype->valueRank = -1;
16490 addNodeInternalWithType(server, (UA_Node*)buildinfotype,
16496 serverstatustype->valueRank = -1;
16498 addNodeInternalWithType(server, (UA_Node*)serverstatustype,
16507 copyNames((UA_Node*)baseobjtype,
"BaseObjectType");
16528 static const UA_NodeId nodeIdFolderType = {
16531 static const UA_NodeId nodeIdHasTypeDefinition = {
16536 copyNames((UA_Node*)root,
"Root");
16545 copyNames((UA_Node*)objects,
"Objects");
16547 addNodeInternalWithType(server, (UA_Node*)objects, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16548 nodeIdOrganizes, nodeIdFolderType);
16551 copyNames((UA_Node*)types,
"Types");
16553 addNodeInternalWithType(server, (UA_Node*)types, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16554 nodeIdOrganizes, nodeIdFolderType);
16557 copyNames((UA_Node*)referencetypes,
"ReferenceTypes");
16559 addNodeInternalWithType(server, (UA_Node*)referencetypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16560 nodeIdOrganizes, nodeIdFolderType);
16565 copyNames((UA_Node*)datatypes,
"DataTypes");
16567 addNodeInternalWithType(server, (UA_Node*)datatypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16568 nodeIdOrganizes, nodeIdFolderType);
16573 copyNames((UA_Node*)variabletypes,
"VariableTypes");
16575 addNodeInternalWithType(server, (UA_Node*)variabletypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16576 nodeIdOrganizes, nodeIdFolderType);
16581 copyNames((UA_Node*)objecttypes,
"ObjectTypes");
16583 addNodeInternalWithType(server, (UA_Node*)objecttypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16584 nodeIdOrganizes, nodeIdFolderType);
16589 copyNames((UA_Node*)eventtypes,
"EventTypes");
16591 addNodeInternalWithType(server, (UA_Node*)eventtypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16592 nodeIdOrganizes, nodeIdFolderType);
16595 copyNames((UA_Node*)views,
"Views");
16597 addNodeInternalWithType(server, (UA_Node*)views, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16598 nodeIdOrganizes, nodeIdFolderType);
16605 copyNames((UA_Node*)mandatory,
"Mandatory");
16607 addNodeInternalWithType(server, (UA_Node*)mandatory, UA_NODEID_NULL,
16611 copyNames((UA_Node*)optional,
"Optional");
16613 addNodeInternalWithType(server, (UA_Node*)optional, UA_NODEID_NULL,
16618 ua_namespaceinit_generated(server);
16627 copyNames((UA_Node*)servernode,
"Server");
16636 deleteInstanceChildren(server, &serverNodeId);
16639 copyNames((UA_Node*)namespaceArray,
"NamespaceArray");
16642 namespaceArray->value.dataSource = (UA_DataSource) {.handle = server, .read = readNamespaces,
16643 .write = writeNamespaces};
16645 namespaceArray->valueRank = 1;
16647 addNodeInternalWithType(server, (UA_Node*)namespaceArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16651 copyNames((UA_Node*)serverArray,
"ServerArray");
16654 &server->config.applicationDescription.applicationUri, 1,
16655 &UA_TYPES[UA_TYPES_STRING]);
16656 serverArray->value.data.value.hasValue =
true;
16657 serverArray->valueRank = 1;
16659 addNodeInternalWithType(server, (UA_Node*)serverArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16663 copyNames((UA_Node*)servercapablities,
"ServerCapabilities");
16665 addNodeInternalWithType(server, (UA_Node*)servercapablities, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16666 nodeIdHasComponent,
16669 deleteInstanceChildren(server, &ServerCapabilitiesNodeId);
16672 copyNames((UA_Node*)localeIdArray,
"LocaleIdArray");
16676 &enLocale, 1, &UA_TYPES[UA_TYPES_STRING]);
16677 localeIdArray->value.data.value.hasValue =
true;
16678 localeIdArray->valueRank = 1;
16680 addNodeInternalWithType(server, (UA_Node*)localeIdArray,
16684 UA_VariableNode *maxBrowseContinuationPoints = UA_NodeStore_newVariableNode();
16685 copyNames((UA_Node*)maxBrowseContinuationPoints,
"MaxBrowseContinuationPoints");
16686 maxBrowseContinuationPoints->nodeId.identifier.numeric =
16690 maxBrowseContinuationPoints->value.data.value.hasValue =
true;
16691 addNodeInternalWithType(server, (UA_Node*)maxBrowseContinuationPoints,
16696 #define MAX_PROFILEARRAY 16 //a *magic* limit to the number of supported profiles 16697 #define ADDPROFILEARRAY(x) profileArray[profileArraySize++] = UA_STRING_ALLOC(x) 16700 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NanoEmbeddedDevice");
16702 #ifdef UA_ENABLE_SERVICESET_NODEMANAGEMENT 16703 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NodeManagement");
16705 #ifdef UA_ENABLE_SERVICESET_METHOD 16706 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/Methods");
16708 #ifdef UA_ENABLE_SUBSCRIPTIONS 16709 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/EmbeddedDataChangeSubscription");
16712 UA_VariableNode *serverProfileArray = UA_NodeStore_newVariableNode();
16713 copyNames((UA_Node*)serverProfileArray,
"ServerProfileArray");
16716 UA_Array_new(profileArraySize, &UA_TYPES[UA_TYPES_STRING]),
16717 profileArraySize, &UA_TYPES[UA_TYPES_STRING]);
16718 for(
UA_UInt16 i=0;i<profileArraySize;++i)
16719 ((
UA_String *)serverProfileArray->value.data.value.value.data)[i] = profileArray[i];
16720 serverProfileArray->value.data.value.hasValue =
true;
16721 serverProfileArray->valueRank = 1;
16723 addNodeInternalWithType(server, (UA_Node*)serverProfileArray,
16727 UA_VariableNode *softwareCertificates = UA_NodeStore_newVariableNode();
16728 copyNames((UA_Node*)softwareCertificates,
"SoftwareCertificates");
16731 addNodeInternalWithType(server, (UA_Node*)softwareCertificates,
16735 UA_VariableNode *maxQueryContinuationPoints = UA_NodeStore_newVariableNode();
16736 copyNames((UA_Node*)maxQueryContinuationPoints,
"MaxQueryContinuationPoints");
16739 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16740 maxQueryContinuationPoints->value.data.value.hasValue =
true;
16741 addNodeInternalWithType(server, (UA_Node*)maxQueryContinuationPoints,
16745 UA_VariableNode *maxHistoryContinuationPoints = UA_NodeStore_newVariableNode();
16746 copyNames((UA_Node*)maxHistoryContinuationPoints,
"MaxHistoryContinuationPoints");
16749 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16750 maxHistoryContinuationPoints->value.data.value.hasValue =
true;
16751 addNodeInternalWithType(server, (UA_Node*)maxHistoryContinuationPoints,
16755 UA_VariableNode *minSupportedSampleRate = UA_NodeStore_newVariableNode();
16756 copyNames((UA_Node*)minSupportedSampleRate,
"MinSupportedSampleRate");
16760 minSupportedSampleRate->value.data.value.hasValue =
true;
16761 addNodeInternalWithType(server, (UA_Node*)minSupportedSampleRate,
16766 copyNames((UA_Node*)modellingRules,
"ModellingRules");
16768 addNodeInternalWithType(server, (UA_Node*)modellingRules,
16773 copyNames((UA_Node*)aggregateFunctions,
"AggregateFunctions");
16775 addNodeInternalWithType(server, (UA_Node*)aggregateFunctions,
16780 copyNames((UA_Node*)serverdiagnostics,
"ServerDiagnostics");
16782 addNodeInternalWithType(server, (UA_Node*)serverdiagnostics,
16786 deleteInstanceChildren(server, &ServerDiagnosticsNodeId);
16789 copyNames((UA_Node*)enabledFlag,
"EnabledFlag");
16793 enabledFlag->value.data.value.hasValue =
true;
16794 enabledFlag->valueRank = 1;
16796 addNodeInternalWithType(server, (UA_Node*)enabledFlag,
16801 copyNames((UA_Node*)serverstatus,
"ServerStatus");
16804 serverstatus->value.dataSource = (UA_DataSource) {.handle = server, .read = readStatus,
16806 addNodeInternalWithType(server, (UA_Node*)serverstatus, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16810 copyNames((UA_Node*)starttime,
"StartTime");
16814 starttime->value.data.value.hasValue =
true;
16815 addNodeInternalWithType(server, (UA_Node*)starttime,
16820 copyNames((UA_Node*)currenttime,
"CurrentTime");
16823 currenttime->value.dataSource = (UA_DataSource) {.handle =
NULL, .read = readCurrentTime,
16825 addNodeInternalWithType(server, (UA_Node*)currenttime,
16830 copyNames((UA_Node*)state,
"State");
16834 state->value.data.value.hasValue =
true;
16840 copyNames((UA_Node*)buildinfo,
"BuildInfo");
16844 buildinfo->value.data.value.hasValue =
true;
16845 addNodeInternalWithType(server, (UA_Node*)buildinfo,
16850 copyNames((UA_Node*)producturi,
"ProductUri");
16853 &UA_TYPES[UA_TYPES_STRING]);
16854 producturi->value.data.value.hasValue =
true;
16855 addNodeInternalWithType(server, (UA_Node*)producturi,
16860 copyNames((UA_Node*)manufacturername,
"ManufacturerName");
16863 &server->config.buildInfo.manufacturerName,
16864 &UA_TYPES[UA_TYPES_STRING]);
16865 manufacturername->value.data.value.hasValue =
true;
16866 addNodeInternalWithType(server, (UA_Node*)manufacturername,
16871 copyNames((UA_Node*)productname,
"ProductName");
16874 &UA_TYPES[UA_TYPES_STRING]);
16875 productname->value.data.value.hasValue =
true;
16876 addNodeInternalWithType(server, (UA_Node*)productname,
16881 copyNames((UA_Node*)softwareversion,
"SoftwareVersion");
16884 &server->config.buildInfo.softwareVersion, &UA_TYPES[UA_TYPES_STRING]);
16885 softwareversion->value.data.value.hasValue =
true;
16886 addNodeInternalWithType(server, (UA_Node*)softwareversion,
16891 copyNames((UA_Node*)buildnumber,
"BuildNumber");
16894 &UA_TYPES[UA_TYPES_STRING]);
16895 buildnumber->value.data.value.hasValue =
true;
16896 addNodeInternalWithType(server, (UA_Node*)buildnumber,
16901 copyNames((UA_Node*)builddate,
"BuildDate");
16904 &UA_TYPES[UA_TYPES_DATETIME]);
16905 builddate->value.data.value.hasValue =
true;
16906 addNodeInternalWithType(server, (UA_Node*)builddate,
16910 UA_VariableNode *secondstillshutdown = UA_NodeStore_newVariableNode();
16911 copyNames((UA_Node*)secondstillshutdown,
"SecondsTillShutdown");
16915 secondstillshutdown->value.data.value.hasValue =
true;
16916 addNodeInternalWithType(server, (UA_Node*)secondstillshutdown,
16921 copyNames((UA_Node*)shutdownreason,
"ShutdownReason");
16925 shutdownreason->value.data.value.hasValue =
true;
16926 addNodeInternalWithType(server, (UA_Node*)shutdownreason,
16931 copyNames((UA_Node*)servicelevel,
"ServiceLevel");
16934 servicelevel->value.dataSource = (UA_DataSource) {.handle = server, .read = readServiceLevel,
16936 addNodeInternalWithType(server, (UA_Node*)servicelevel,
16941 copyNames((UA_Node*)auditing,
"Auditing");
16944 auditing->value.dataSource = (UA_DataSource) {.handle = server, .read = readAuditing, .write =
NULL};
16945 addNodeInternalWithType(server, (UA_Node*)auditing,
16950 copyNames((UA_Node*)vendorServerInfo,
"VendorServerInfo");
16952 addNodeInternalWithType(server, (UA_Node*)vendorServerInfo,
16962 copyNames((UA_Node*)serverRedundancy,
"ServerRedundancy");
16964 addNodeInternalWithType(server, (UA_Node*)serverRedundancy,
16973 copyNames((UA_Node*)redundancySupport,
"RedundancySupport");
16975 redundancySupport->valueRank = -1;
16980 redundancySupport->value.data.value.hasValue =
true;
16981 addNodeInternalWithType(server, (UA_Node*)redundancySupport,
16985 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16987 UA_Argument_init(&inputArguments);
16989 inputArguments.
name = UA_STRING(
"SubscriptionId");
16993 UA_Argument_init(&outputArguments[0]);
16995 outputArguments[0].
name = UA_STRING(
"ServerHandles");
16998 UA_Argument_init(&outputArguments[1]);
17000 outputArguments[1].
name = UA_STRING(
"ClientHandles");
17004 UA_MethodAttributes_init(&addmethodattributes);
17005 addmethodattributes.
displayName = UA_LOCALIZEDTEXT(
"",
"GetMonitoredItems");
17012 UA_QUALIFIEDNAME(0,
"GetMonitoredItems"), addmethodattributes,
17015 1, &inputArguments, 2, outputArguments,
NULL);
17037 UA_StatusCode retval = UA_RequestHeader_decodeBinary(msg, &offset, &requestHeader);
17041 UA_init(response, responseType);
17047 UA_RequestHeader_deleteMembers(&requestHeader);
17048 UA_ResponseHeader_deleteMembers(responseHeader);
17055 switch(requestTypeId) {
17060 *requiresSession =
false;
17066 *requiresSession =
false;
17072 *requiresSession =
false;
17120 #ifdef UA_ENABLE_SUBSCRIPTIONS 17172 #ifdef UA_ENABLE_METHODCALLS 17180 #ifdef UA_ENABLE_NODEMANAGEMENT 17215 if(UA_TcpHelloMessage_decodeBinary(msg, offset, &helloMessage) !=
UA_STATUSCODE_GOOD) {
17216 connection->
close(connection);
17231 UA_TcpHelloMessage_deleteMembers(&helloMessage);
17247 UA_ByteString_init(&ack_msg);
17255 UA_TcpMessageHeader_encodeBinary(&ackHeader, &ack_msg, &tmpPos);
17256 UA_TcpAcknowledgeMessage_encodeBinary(&ackMessage, &ack_msg, &tmpPos);
17258 connection->
send(connection, &ack_msg);
17270 if(!connection->
channel && channelId != 0)
17282 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(msg, &offset, &asymHeader);
17283 retval |= UA_SequenceHeader_decodeBinary(msg, &offset, &seqHeader);
17284 retval |= UA_NodeId_decodeBinary(msg, &offset, &requestType);
17285 retval |= UA_OpenSecureChannelRequest_decodeBinary(msg, &offset, &r);
17289 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17290 UA_NodeId_deleteMembers(&requestType);
17291 UA_OpenSecureChannelRequest_deleteMembers(&r);
17292 connection->
close(connection);
17298 UA_OpenSecureChannelResponse_init(&p);
17300 UA_OpenSecureChannelRequest_deleteMembers(&r);
17305 UA_OpenSecureChannelResponse_deleteMembers(&p);
17306 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17307 connection->
close(connection);
17316 UA_ByteString_init(&resp_msg);
17319 UA_OpenSecureChannelResponse_deleteMembers(&p);
17320 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17321 connection->
close(connection);
17326 size_t tmpPos = 12;
17328 retval |= UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &resp_msg, &tmpPos);
17329 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &resp_msg, &tmpPos);
17331 retval |= UA_NodeId_encodeBinary(&responseType, &resp_msg, &tmpPos);
17332 retval |= UA_OpenSecureChannelResponse_encodeBinary(&p, &resp_msg, &tmpPos);
17336 UA_OpenSecureChannelResponse_deleteMembers(&p);
17337 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17338 connection->
close(connection);
17348 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, &resp_msg, &tmpPos);
17350 connection->
send(connection, &resp_msg);
17353 UA_OpenSecureChannelResponse_deleteMembers(&p);
17354 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17362 size_t *offset = &ppos;
17366 UA_StatusCode retval = UA_NodeId_decodeBinary(msg, offset, &requestTypeId);
17370 UA_NodeId_deleteMembers(&requestTypeId);
17373 size_t requestPos = *offset;
17381 &responseType, &service, &sessionRequired);
17385 "Client requested a subscription, " \
17386 "but those are not enabled in the build");
17389 "Unknown request with type identifier %i",
17398 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 17400 sessionRequired =
false;
17409 "Could not decode the request");
17410 sendError(channel, msg, requestPos, responseType, requestId, retval);
17416 UA_init(response, responseType);
17417 UA_Session *session =
NULL;
17422 goto send_response;
17434 "Trying to activate a session that is " \
17435 "not known in the server");
17436 sendError(channel, msg, requestPos, responseType,
17442 goto send_response;
17446 UA_Session anonymousSession;
17448 if(sessionRequired) {
17450 "Service request %i without a valid session",
17452 sendError(channel, msg, requestPos, responseType,
17458 anonymousSession.
sessionId = UA_NODEID_GUID(0, UA_GUID_NULL);
17459 anonymousSession.
channel = channel;
17460 session = &anonymousSession;
17464 if(sessionRequired && !session->
activated) {
17466 "Calling service %i on a non-activated session",
17468 sendError(channel, msg, requestPos, responseType,
17477 if(session->
channel != channel) {
17479 "Client tries to use an obsolete securechannel");
17480 sendError(channel, msg, requestPos, responseType,
17489 #ifdef UA_ENABLE_SUBSCRIPTIONS 17500 service(server, session, request, response);
17510 "Could not send the message over the SecureChannel " 17511 "with StatusCode %s", UA_StatusCode_name(retval));
17521 if (UA_TcpErrorMessage_decodeBinary(msg, offset, &errorMessage) !=
UA_STATUSCODE_GOOD) {
17522 connection->
close(connection);
17527 "Client replied with an error message: %s %.*s",
17535 UA_Server_processSecureChannelMessage(UA_Server *server,
UA_SecureChannel *channel,
17540 switch(messagetype) {
17544 "Client replied with an error message: %s %.*s",
17550 "Cannot process a HEL on an open channel");
17554 "Process an OPN on an open channel");
17560 processMSG(server, channel, requestId, message);
17569 "Unknown message type");
17585 "resulted in error code %s", UA_StatusCode_name(retval));
17590 UA_StatusCode retval = UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
17592 connection->
close(connection);
17600 "Connection %i | Process ERR message", connection->
sockfd);
17601 processERR(server, connection, message, &offset);
17605 "Connection %i | Process HEL message", connection->
sockfd);
17606 processHEL(connection, message, &offset);
17610 "Connection %i | Process OPN message", connection->
sockfd);
17612 retval = UA_UInt32_decodeBinary(message, &offset, &channelId);
17614 connection->
close(connection);
17617 processOPN(server, connection, channelId, &offsetMessage);
17621 "Connection %i | Processing a MSG message not possible " 17622 "without a SecureChannel", connection->
sockfd);
17623 connection->
close(connection);
17627 "Connection %i | Processing a CLO message not possible " 17628 "without a SecureChannel", connection->
sockfd);
17629 connection->
close(connection);
17633 "Connection %i | Unknown message type", connection->
sockfd);
17634 connection->
close(connection);
17655 if(buflen <= progress + 1 || buf[progress] !=
':') {
17661 size_t progress2 =
UA_readNumber(&buf[progress], buflen - progress, &dim->
max);
17666 if(dim->
min >= dim->
max)
17669 return progress + progress2;
17675 size_t dimensionsMax = 0;
17681 if(idx >= dimensionsMax) {
17689 dimensions = newds;
17690 dimensionsMax = dimensionsMax + 2;
17694 size_t progress = readDimension(&str->
data[offset], str->
length - offset,
17696 if(progress == 0) {
17700 offset += progress;
17704 if(offset >= str->
length)
17707 if(str->
data[offset] !=
',') {
17729 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize) {
17730 size_t results_size = 20;
17735 UA_StatusCode retval = UA_NodeId_copy(&rootRef->nodeId, &results[0]);
17741 const UA_Node *node = rootRef;
17746 for(
size_t i = 0; i < node->referencesSize; ++i) {
17748 if(node->references[i].isInverse != inverse ||
17749 !
UA_NodeId_equal(&hasSubtypeNodeId, &node->references[i].referenceTypeId))
17754 for(
size_t j = 0; j <= last; ++j) {
17755 if(
UA_NodeId_equal(&node->references[i].targetId.nodeId, &results[j])) {
17764 if(last + 1 >= results_size) {
17771 results = new_results;
17776 retval = UA_NodeId_copy(&node->references[i].targetId.nodeId, &results[++last]);
17787 if(!node || node->nodeClass != rootRef->nodeClass)
17796 *typeHierarchy = results;
17797 *typeHierarchySize = last + 1;
17803 const UA_NodeId *referenceTypeIds,
size_t referenceTypeIdsSize) {
17812 for(
size_t i = 0; i < node->referencesSize; ++i) {
17813 if(!node->references[i].isInverse)
17817 for(
size_t j = 0; j < referenceTypeIdsSize; ++j) {
17818 if(
UA_NodeId_equal(&node->references[i].referenceTypeId, &referenceTypeIds[j]) &&
17819 isNodeInTree(ns, &node->references[i].targetId.nodeId, nodeToFind,
17820 referenceTypeIds, referenceTypeIdsSize))
17848 for(
size_t i = 0; i < node->referencesSize; ++i) {
17849 if(node->references[i].isInverse == inverse &&
17851 parentId = &node->references[i].targetId.nodeId;
17863 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17871 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17881 for(
size_t i = 0; i < node->referencesSize; ++i) {
17882 if(node->references[i].isInverse ==
false &&
17885 if(node->references[i].isInverse ==
true &&
17886 UA_NodeId_equal(&node->references[i].referenceTypeId, &hasTypeDefinition))
17897 const void *data) {
17898 #ifndef UA_ENABLE_MULTITHREADING 17902 UA_Node *editNode = (UA_Node*)(uintptr_t)node;
17903 return callback(server, session, editNode, data);
17910 retval = callback(server, session, copy, data);
17963 #define MAXTIMEOUT 50 // max timeout in millisec until the next main loop iteration 17966 processJob(UA_Server *server,
UA_Job *job) {
17969 switch(job->
type) {
17970 case UA_JOBTYPE_NOTHING:
17972 case UA_JOBTYPE_DETACHCONNECTION:
17975 case UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER:
17981 case UA_JOBTYPE_BINARYMESSAGE_ALLOCATED:
17986 case UA_JOBTYPE_METHODCALL:
17987 case UA_JOBTYPE_METHODCALL_DELAYED:
17992 "Trying to execute a job of unknown type");
18002 #ifdef UA_ENABLE_MULTITHREADING 18004 struct MainLoopJob {
18005 struct cds_lfs_node node;
18009 struct DispatchJob {
18010 struct cds_wfcq_node node;
18015 workerLoop(UA_Worker *worker) {
18016 UA_Server *server = worker->server;
18018 volatile UA_Boolean *running = &worker->running;
18022 rcu_register_thread();
18025 struct DispatchJob *dj = (
struct DispatchJob*)
18026 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18028 processJob(server, &dj->job);
18032 pthread_mutex_lock(&server->dispatchQueue_mutex);
18033 pthread_cond_wait(&server->dispatchQueue_condition, &server->dispatchQueue_mutex);
18034 pthread_mutex_unlock(&server->dispatchQueue_mutex);
18036 UA_atomic_add(counter, 1);
18041 rcu_unregister_thread();
18047 dispatchJob(UA_Server *server,
const UA_Job *job) {
18048 struct DispatchJob *dj =
UA_malloc(
sizeof(
struct DispatchJob));
18050 cds_wfcq_node_init(&dj->node);
18051 cds_wfcq_enqueue(&server->dispatchQueue_head, &server->dispatchQueue_tail, &dj->node);
18055 emptyDispatchQueue(UA_Server *server) {
18056 while(!cds_wfcq_empty(&server->dispatchQueue_head, &server->dispatchQueue_tail)) {
18057 struct DispatchJob *dj = (
struct DispatchJob*)
18058 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18059 processJob(server, &dj->job);
18094 if(tmpRj->nextTime >= nextTime_max)
18096 if(tmpRj->interval == rj->interval &&
18098 nextTime_max = tmpRj->nextTime;
18103 rj->nextTime = nextTime_max;
18125 rj->interval = interval_dt;
18129 #ifdef UA_ENABLE_MULTITHREADING 18131 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18137 .type = UA_JOBTYPE_METHODCALL,
18138 .job.methodCall = {.data = rj, .method = (void (*)(UA_Server*,
void*))addRepeatedJob}};
18139 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18142 addRepeatedJob(server, rj);
18157 tmp_last.nextTime = current-1;
18163 if(rj->nextTime > current)
18167 #ifdef UA_ENABLE_MULTITHREADING 18168 dispatchJob(server, &rj->job);
18169 *dispatched =
true;
18171 struct RepeatedJob **previousNext = rj->next.le_prev;
18172 processJob(server, &rj->job);
18176 if((
void*)*previousNext != (
void*)rj) {
18178 "The current repeated job removed itself");
18189 rj->nextTime += (
UA_Int64)rj->interval;
18193 if(rj->nextTime < current)
18194 rj->nextTime = current + 1;
18198 if(last_dispatched->nextTime == rj->nextTime) {
18201 UA_assert(last_dispatched != &tmp_last);
18202 prev_rj = last_dispatched;
18205 prev_rj =
LIST_FIRST(&server->repeatedJobs);
18208 if(!n || n->nextTime >= rj->nextTime)
18215 if(prev_rj != rj) {
18221 last_dispatched = rj;
18227 if(first && first->nextTime < next)
18228 next = first->nextTime;
18234 removeRepeatedJob(UA_Server *server,
UA_Guid *jobId) {
18243 #ifdef UA_ENABLE_MULTITHREADING 18249 #ifdef UA_ENABLE_MULTITHREADING 18255 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18257 .type = UA_JOBTYPE_METHODCALL,
18258 .job.methodCall = {.data = idptr, .method = (void (*)(UA_Server*,
void*))removeRepeatedJob}};
18259 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18261 removeRepeatedJob(server, &jobId);
18279 delayed_free(UA_Server *server,
void *data) {
18287 #ifndef UA_ENABLE_MULTITHREADING 18299 dj->job.type = UA_JOBTYPE_METHODCALL;
18300 dj->job.job.methodCall.data = data;
18301 dj->job.job.methodCall.method = callback;
18307 processDelayedCallbacks(UA_Server *server) {
18311 processJob(server, &dj->job);
18318 #define DELAYEDJOBSSIZE 100 // Collect delayed jobs until we have DELAYEDWORKSIZE items 18320 struct DelayedJobs {
18321 struct DelayedJobs *next;
18324 UA_Job jobs[DELAYEDJOBSSIZE];
18328 static void getCounters(UA_Server *server,
struct DelayedJobs *delayed) {
18330 for(
UA_UInt16 i = 0; i < server->config.nThreads; ++i)
18331 counters[i] = server->workers[i].counter;
18332 delayed->workerCounters = counters;
18339 addDelayedJob(UA_Server *server,
UA_Job *job) {
18340 struct DelayedJobs *dj = server->delayedJobs;
18341 if(!dj || dj->jobsCount >= DELAYEDJOBSSIZE) {
18343 dj =
UA_malloc(
sizeof(
struct DelayedJobs));
18346 "Not enough memory to add a delayed job");
18350 dj->workerCounters =
NULL;
18351 dj->next = server->delayedJobs;
18352 server->delayedJobs = dj;
18358 {.method = (void (*)(UA_Server*,
void*))getCounters, .data = dj->next}};
18359 dispatchJob(server, &setCounter);
18362 dj->jobs[dj->jobsCount] = *job;
18367 addDelayedJobAsync(UA_Server *server,
UA_Job *job) {
18368 addDelayedJob(server, job);
18377 j->
type = UA_JOBTYPE_METHODCALL;
18380 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18381 mlw->job = (
UA_Job) {.type = UA_JOBTYPE_METHODCALL, .job.methodCall =
18383 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18389 dispatchDelayedJobs(UA_Server *server,
void *_) {
18391 struct DelayedJobs *dw = server->delayedJobs, *beforedw = dw;
18397 if(!dw->workerCounters) {
18403 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18404 if(dw->workerCounters[i] == server->workers[i].counter) {
18417 for(
size_t i = 0; i < dw->jobsCount; ++i)
18418 processJob(server, &dw->jobs[i]);
18419 struct DelayedJobs *next = UA_atomic_xchg((
void**)&beforedw->next,
NULL);
18432 #ifdef UA_ENABLE_MULTITHREADING 18433 static void processMainLoopJobs(UA_Server *server) {
18435 struct cds_lfs_head *head = __cds_lfs_pop_all(&server->mainLoopJobs);
18438 struct MainLoopJob *mlw = (
struct MainLoopJob*)&head->node;
18439 struct MainLoopJob *next;
18441 processJob(server, &mlw->job);
18442 next = (
struct MainLoopJob*)mlw->node.next;
18445 }
while((mlw = next));
18450 #ifdef UA_ENABLE_MULTITHREADING 18453 "Spinning up %u worker thread(s)", server->config.nThreads);
18454 pthread_cond_init(&server->dispatchQueue_condition, 0);
18455 pthread_mutex_init(&server->dispatchQueue_mutex, 0);
18456 server->workers =
UA_malloc(server->config.nThreads *
sizeof(UA_Worker));
18457 if(!server->workers)
18459 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18460 UA_Worker *worker = &server->workers[i];
18461 worker->server = server;
18462 worker->counter = 0;
18463 worker->running =
true;
18464 pthread_create(&worker->thr,
NULL, (
void* (*)(
void*))workerLoop, worker);
18468 UA_Job processDelayed = {.
type = UA_JOBTYPE_METHODCALL,
18475 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18477 result |= nl->
start(nl, server->config.logger);
18486 completeMessages(UA_Server *server,
UA_Job *job) {
18493 "Lost message(s) from Connection %i as memory could not be allocated",
18497 "Could not merge half-received messages on Connection %i with error 0x%08x",
18499 job->
type = UA_JOBTYPE_NOTHING;
18503 job->
type = UA_JOBTYPE_BINARYMESSAGE_ALLOCATED;
18507 job->
type = UA_JOBTYPE_NOTHING;
18511 #ifdef UA_ENABLE_MULTITHREADING 18513 processMainLoopJobs(server);
18518 UA_DateTime nextRepeated = processRepeatedJobs(server, now, &dispatched);
18525 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18530 if(i == server->config.networkLayersSize-1)
18531 jobsSize = nl->
getJobs(nl, &jobs, timeout);
18533 jobsSize = nl->
getJobs(nl, &jobs, 0);
18535 for(
size_t k = 0; k < jobsSize; ++k) {
18536 #ifdef UA_ENABLE_MULTITHREADING 18538 if(jobs[k].type == UA_JOBTYPE_METHODCALL_DELAYED) {
18539 addDelayedJob(server, &jobs[k]);
18540 jobs[k].
type = UA_JOBTYPE_NOTHING;
18545 if(jobs[k].type == UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER)
18546 completeMessages(server, &jobs[k]);
18550 for(
size_t j = 0; j < jobsSize; ++j) {
18551 #ifdef UA_ENABLE_MULTITHREADING 18552 dispatchJob(server, &jobs[j]);
18555 processJob(server, &jobs[j]);
18564 #ifdef UA_ENABLE_MULTITHREADING 18567 pthread_cond_broadcast(&server->dispatchQueue_condition);
18569 processDelayedCallbacks(server);
18574 if(nextRepeated > now)
18580 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18583 size_t stopJobsSize = nl->
stop(nl, &stopJobs);
18584 for(
size_t j = 0; j < stopJobsSize; ++j)
18585 processJob(server, &stopJobs[j]);
18589 #ifdef UA_ENABLE_MULTITHREADING 18591 if(server->workers) {
18593 "Shutting down %u worker thread(s)", server->config.nThreads);
18595 for(
size_t i = 0; i < server->config.nThreads; ++i)
18596 server->workers[i].running =
false;
18597 pthread_cond_broadcast(&server->dispatchQueue_condition);
18598 for(
size_t i = 0; i < server->config.nThreads; ++i)
18599 pthread_join(server->workers[i].thr,
NULL);
18602 server->workers =
NULL;
18606 emptyDispatchQueue(server);
18610 processDelayedCallbacks(server);
18631 #define STARTCHANNELID 1 18632 #define STARTTOKENID 1 18639 cm->currentChannelCount = 0;
18640 cm->server = server;
18654 removeSecureChannelCallback(UA_Server *server,
void *entry) {
18667 "Could not remove the secure channel with error code %s",
18668 UA_StatusCode_name(retval));
18674 UA_atomic_add(&cm->currentChannelCount, (
UA_UInt32)-1);
18685 if(timeout < nowMonotonic || !entry->channel.
connection) {
18687 "SecureChannel has timed out");
18688 removeSecureChannel(cm, entry);
18701 "Channel was purged since maxSecureChannels was " 18702 "reached and channel had no session attached");
18703 removeSecureChannel(cm, entry);
18720 if(cm->currentChannelCount >= cm->server->config.maxSecureChannels && !purgeFirstChannelWithoutSession(cm)){
18753 UA_atomic_add(&cm->currentChannelCount, 1);
18779 UA_ByteString_deleteMembers(&channel->
clientNonce);
18811 return removeSecureChannel(cm, entry);
18824 sm->currentSessionCount = 0;
18825 sm->server = server;
18840 removeSessionCallback(UA_Server *server,
void *entry) {
18849 sentry->session.activated =
false;
18856 "Could not remove session with error code %s",
18857 UA_StatusCode_name(retval));
18863 UA_atomic_add(&sm->currentSessionCount, (
UA_UInt32)-1);
18873 if(sentry->session.validTill >= nowMonotonic)
18876 "Session has timed out");
18877 removeSession(sm, sentry);
18892 "Client tries to use a session that has timed out");
18897 return ¤t->session;
18911 if(sm->currentSessionCount >= sm->server->config.maxSessions)
18918 UA_atomic_add(&sm->currentSessionCount, 1);
18920 newentry->session.sessionId = UA_NODEID_GUID(1,
UA_Guid_random());
18921 newentry->session.authenticationToken = UA_NODEID_GUID(1,
UA_Guid_random());
18927 newentry->session.timeout = sm->server->config.maxSessionTimeout;
18931 *session = &newentry->session;
18944 return removeSession(sm, current);
18956 UA_NodeId_deleteMembers(&node->nodeId);
18957 UA_QualifiedName_deleteMembers(&node->browseName);
18958 UA_LocalizedText_deleteMembers(&node->displayName);
18959 UA_LocalizedText_deleteMembers(&node->description);
18962 node->references =
NULL;
18963 node->referencesSize = 0;
18966 switch(node->nodeClass) {
18976 UA_NodeId_deleteMembers(&p->dataType);
18979 p->arrayDimensions =
NULL;
18980 p->arrayDimensionsSize = 0;
18982 UA_DataValue_deleteMembers(&p->value.data.value);
19009 src->arrayDimensionsSize,
19010 (
void**)&dst->arrayDimensions,
19014 dst->arrayDimensionsSize = src->arrayDimensionsSize;
19015 retval = UA_NodeId_copy(&src->dataType, &dst->dataType);
19016 dst->valueRank = src->valueRank;
19017 dst->valueSource = src->valueSource;
19019 retval |= UA_DataValue_copy(&src->value.data.value,
19020 &dst->value.data.value);
19021 dst->value.data.callback = src->value.data.callback;
19023 dst->value.dataSource = src->value.dataSource;
19029 UA_StatusCode retval = UA_CommonVariableNode_copy(src, dst);
19086 if(src->nodeClass != dst->nodeClass)
19090 UA_StatusCode retval = UA_NodeId_copy(&src->nodeId, &dst->nodeId);
19091 dst->nodeClass = src->nodeClass;
19092 retval |= UA_QualifiedName_copy(&src->browseName, &dst->browseName);
19093 retval |= UA_LocalizedText_copy(&src->displayName, &dst->displayName);
19094 retval |= UA_LocalizedText_copy(&src->description, &dst->description);
19095 dst->writeMask = src->writeMask;
19096 dst->userWriteMask = src->userWriteMask;
19101 retval |=
UA_Array_copy(src->references, src->referencesSize,
19102 (
void**)&dst->references,
19108 dst->referencesSize = src->referencesSize;
19111 switch(src->nodeClass) {
19160 #ifndef UA_ENABLE_MULTITHREADING 19162 #define UA_NODESTORE_MINSIZE 64 19169 #define UA_NODESTORE_TOMBSTONE ((UA_NodeStoreEntry*)0x01) 19181 7, 13, 31, 61, 127, 251,
19182 509, 1021, 2039, 4093, 8191, 16381,
19183 32749, 65521, 131071, 262139, 524287, 1048573,
19184 2097143, 4194301, 8388593, 16777213, 33554393, 67108859,
19185 134217689, 268435399, 536870909, 1073741789, 2147483647, 4294967291
19195 while(low != high) {
19197 if(n > primes[mid])
19208 switch(nodeClass) {
19239 entry->
node.nodeClass = nodeClass;
19308 UA_UInt32 nindex = higher_prime_index(count * 2);
19319 for(
size_t i = 0, j = 0; i < osize && j < count; ++i) {
19358 deleteEntry(entries[i]);
19369 return &entry->
node;
19376 deleteEntry(entry);
19387 tempNodeid = node->nodeId;
19392 if(node->nodeId.namespaceIndex == 0)
19393 node->nodeId.namespaceIndex = 1;
19396 UA_UInt32 increase = mod2(identifier, size);
19398 node->nodeId.identifier.numeric = identifier;
19399 entry = findSlot(ns, &node->nodeId);
19402 identifier += increase;
19403 if(identifier >= size)
19404 identifier -= size;
19407 entry = findSlot(ns, &node->nodeId);
19426 if(*entry != newEntry->
orig) {
19428 deleteEntry(newEntry);
19431 deleteEntry(*entry);
19441 return (
const UA_Node*)&(*entry)->node;
19466 deleteEntry(*slot);
19492 #ifdef UA_ENABLE_MULTITHREADING 19493 #include <urcu/rculfhash.h> 19496 struct cds_lfht_node htn;
19497 struct rcu_head rcu_head;
19498 struct nodeEntry *orig;
19502 static struct nodeEntry * instantiateEntry(
UA_NodeClass class) {
19503 size_t size =
sizeof(
struct nodeEntry) - sizeof(UA_Node);
19532 struct nodeEntry *entry =
UA_calloc(1, size);
19535 entry->node.nodeClass =
class;
19539 static void deleteEntry(
struct rcu_head *head) {
19540 struct nodeEntry *entry =
container_of(head,
struct nodeEntry, rcu_head);
19546 static int compare(
struct cds_lfht_node *htn,
const void *orig) {
19549 const UA_NodeId *newid = &((
struct nodeEntry *)htn)->node.nodeId;
19555 return (
UA_NodeStore*)cds_lfht_new(64, 64, 0, CDS_LFHT_AUTO_RESIZE,
NULL);
19561 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19562 struct cds_lfht_iter iter;
19563 cds_lfht_first(ht, &iter);
19565 if(!cds_lfht_del(ht, iter.node)) {
19567 struct nodeEntry *entry = (
struct nodeEntry*) iter.
node;
19568 call_rcu(&entry->rcu_head, deleteEntry);
19570 cds_lfht_next(ht, &iter);
19573 cds_lfht_destroy(ht,
NULL);
19578 struct nodeEntry *entry = instantiateEntry(
class);
19581 return (UA_Node*)&entry->node;
19585 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19586 deleteEntry(&entry->rcu_head);
19591 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19592 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19593 cds_lfht_node_init(&entry->htn);
19594 struct cds_lfht_node *result;
19597 tempNodeid = node->nodeId;
19601 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19603 if(result != &entry->htn) {
19604 deleteEntry(&entry->rcu_head);
19610 if(node->nodeId.namespaceIndex == 0)
19611 node->nodeId.namespaceIndex = 1;
19613 unsigned long identifier;
19614 long before, after;
19615 cds_lfht_count_nodes(ht, &before, &identifier, &after);
19618 node->nodeId.identifier.numeric = (
UA_UInt32)identifier;
19621 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19622 if(result == &entry->htn)
19624 node->nodeId.identifier.numeric += (
UA_UInt32)(identifier * 2654435761);
19632 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19633 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19637 struct cds_lfht_iter iter;
19638 cds_lfht_lookup(ht, h, compare, &node->nodeId, &iter);
19643 struct nodeEntry *oldEntry = (
struct nodeEntry*)iter.node;
19644 if(oldEntry != entry->orig) {
19645 deleteEntry(&entry->rcu_head);
19649 cds_lfht_node_init(&entry->htn);
19650 if(cds_lfht_replace(ht, &iter, h, compare, &node->nodeId, &entry->htn) != 0) {
19652 deleteEntry(&entry->rcu_head);
19657 call_rcu(&oldEntry->rcu_head, deleteEntry);
19663 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19665 struct cds_lfht_iter iter;
19666 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19667 if(!iter.node || cds_lfht_del(ht, iter.node) != 0)
19669 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19670 call_rcu(&entry->rcu_head, deleteEntry);
19676 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19678 struct cds_lfht_iter iter;
19679 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19680 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19683 return &found_entry->node;
19688 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19690 struct cds_lfht_iter iter;
19691 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19692 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19695 struct nodeEntry *
new = instantiateEntry(entry->node.nodeClass);
19699 deleteEntry(&new->rcu_head);
19708 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19709 struct cds_lfht_iter iter;
19710 cds_lfht_first(ht, &iter);
19711 while(iter.node !=
NULL) {
19712 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19713 visitor(&found_entry->node);
19714 cds_lfht_next(ht, &iter);
19737 UA_ApplicationDescription_copy(&server->config.applicationDescription, descr);
19748 UA_ApplicationDescription_delete(descr);
19756 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
19770 if(endpointUrl->
length > 0) {
19771 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with endpointUrl " \
19774 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with an empty endpointUrl");
19784 size_t relevant_count = 0;
19787 relevant_endpoints[j] =
true;
19794 relevant_endpoints[j] =
true;
19801 if(relevant_count == 0) {
19807 size_t clone_times = 1;
19809 if(endpointUrl->
length == 0) {
19810 clone_times = server->config.networkLayersSize;
19811 nl_endpointurl =
true;
19823 for(
size_t i = 0; i < clone_times; ++i) {
19825 endpointUrl = &server->config.networkLayers[i].discoveryUrl;
19827 if(!relevant_endpoints[j])
19861 "Connection %i | SecureChannel %i | OpenSecureChannel: Opened SecureChannel",
19865 "Connection %i | OpenSecureChannel: Opening a SecureChannel failed",
19874 "Connection %i | SecureChannel %i | OpenSecureChannel: SecureChannel renewed",
19878 "Connection %i | OpenSecureChannel: Renewing SecureChannel failed",
19917 UA_Session *newSession;
19921 UA_LOG_DEBUG_CHANNEL(server->config.logger, channel,
"Processing CreateSessionRequest failed");
19948 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19957 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19973 if(server->config.enableAnonymousLogin &&
19981 }
else if(server->config.enableUsernamePasswordLogin &&
20003 for(
size_t i = 0; i < server->config.usernamePasswordLoginsSize; ++i) {
20004 UA_String *user = &server->config.usernamePasswordLogins[i].username;
20005 UA_String *pw = &server->config.usernamePasswordLogins[i].password;
20013 "ActivateSession: Did not find matching username/password");
20025 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Detach from old channel");
20033 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Session activated");
20050 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20057 UA_Variant_init(v);
20059 v->
data = (
void*)(uintptr_t)p;
20087 compatibleValueRankArrayDimensions(
UA_Int32 valueRank,
size_t arrayDimensionsSize) {
20088 switch(valueRank) {
20090 if(arrayDimensionsSize > 1)
20096 if(arrayDimensionsSize > 0)
20100 if(arrayDimensionsSize < 1)
20108 if(arrayDimensionsSize != (
size_t)valueRank)
20122 if(!UA_Variant_isScalar(value))
20124 return compatibleValueRankArrayDimensions(valueRank, arrayDims);
20129 const UA_UInt32 *constraintArrayDimensions,
20130 size_t testArrayDimensionsSize,
20131 const UA_UInt32 *testArrayDimensions) {
20133 if(constraintArrayDimensionsSize == 0) {
20138 if(testArrayDimensionsSize != constraintArrayDimensionsSize)
20142 for(
size_t i = 0; i < constraintArrayDimensionsSize; ++i) {
20143 if(constraintArrayDimensions[i] != testArrayDimensions[i] &&
20144 constraintArrayDimensions[i] != 0)
20153 convertToMatchingValue(UA_Server *server,
const UA_Variant *value,
20156 if(!targetDataType)
20163 UA_Variant_isScalar(value)) {
20169 return editableValue;
20177 *editableValue = *value;
20179 editableValue->
type = targetDataType;
20180 return editableValue;
20196 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
20217 value = convertToMatchingValue(server, value, targetDataTypeId, editableValue);
20228 if(valueArrayDimensions == 0 && !UA_Variant_isScalar(value)) {
20229 valueArrayDimensionsSize = 1;
20231 valueArrayDimensions = &tempArrayDimensions;
20236 if(targetArrayDimensionsSize > 0)
20238 valueArrayDimensionsSize, valueArrayDimensions);
20241 return compatibleValueRankValue(targetValueRank, value);
20258 writeArrayDimensionsAttribute(UA_Server *server,
UA_VariableNode *node,
20259 size_t arrayDimensionsSize,
UA_UInt32 *arrayDimensions) {
20267 UA_StatusCode retval = compatibleValueRankArrayDimensions(node->valueRank, arrayDimensionsSize);
20270 "The current value rank does not match the new array dimensions");
20281 if(vt->arrayDimensions) {
20283 arrayDimensionsSize, arrayDimensions);
20286 "Array dimensions in the variable type do not match");
20293 UA_DataValue_init(&value);
20301 UA_DataValue_deleteMembers(&value);
20304 "Array dimensions in the current value do not match");
20310 UA_UInt32 *oldArrayDimensions = node->arrayDimensions;
20311 retval =
UA_Array_copy(arrayDimensions, arrayDimensionsSize,
20316 node->arrayDimensionsSize = arrayDimensionsSize;
20325 writeValueRankAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20343 switch(constraintValueRank) {
20345 if(valueRank != -1 && valueRank != 1)
20351 if(valueRank != -1)
20359 if(valueRank != constraintValueRank)
20366 size_t arrayDims = node->arrayDimensionsSize;
20368 if(arrayDims == 0) {
20372 UA_DataValue_init(&value);
20378 if(!UA_Variant_isScalar(&value.
value))
20380 UA_DataValue_deleteMembers(&value);
20382 retval = compatibleValueRankArrayDimensions(valueRank, arrayDims);
20388 node->valueRank = valueRank;
20397 writeDataTypeAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20418 constraintDataType, &subtypeId, 1))
20423 UA_DataValue_init(&value);
20429 node->arrayDimensionsSize, node->arrayDimensions,
20431 UA_DataValue_deleteMembers(&value);
20434 "The current value does not match the new data type");
20441 retval = UA_NodeId_copy(dataType, &node->dataType);
20443 node->dataType = dtCopy;
20446 UA_NodeId_deleteMembers(&dtCopy);
20457 if(vn->value.data.callback.onRead) {
20459 vn->value.data.callback.onRead(vn->value.data.callback.handle,
20460 vn->nodeId, &vn->value.data.value.value, rangeptr);
20462 #ifdef UA_ENABLE_MULTITHREADING 20469 *v = vn->value.data.value;
20478 if(!vn->value.dataSource.read)
20485 vn->value.dataSource.read(vn->value.dataSource.handle, vn->nodeId,
20486 sourceTimeStamp, rangeptr, v);
20492 readValueAttributeComplete(UA_Server *server,
const UA_VariableNode *vn,
20499 if(indexRange && indexRange->
length > 0) {
20508 retval = readValueAttributeFromNode(server, vn, v, rangeptr);
20510 retval = readValueAttributeFromDataSource(vn, v, timestamps, rangeptr);
20526 UA_StatusCode retval = UA_DataValue_copy(value, &node->value.data.value);
20528 UA_DataValue_deleteMembers(&old_value);
20530 node->value.data.value = old_value;
20538 if(value->
status != node->value.data.value.status ||
20539 !value->
hasValue || !node->value.data.value.hasValue)
20545 if(UA_Variant_isScalar(&value->
value)) {
20546 editableValue = value->
value;
20548 v = &editableValue;
20558 node->value.data.value.hasStatus = value->
hasStatus;
20559 node->value.data.value.status = value->
status;
20574 if(indexRange && indexRange->
length > 0) {
20588 retval =
typeCheckValue(server, &node->dataType, node->valueRank,
20589 node->arrayDimensionsSize, node->arrayDimensions,
20590 &value->
value, rangeptr, &editableValue.
value);
20604 retval = writeValueAttributeWithoutRange(node, &editableValue);
20606 retval = writeValueAttributeWithRange(node, &editableValue, rangeptr);
20611 #ifdef UA_ENABLE_MULTITHREADING 20615 writtenNode = node;
20619 writtenNode->value.data.callback.onWrite(writtenNode->value.data.callback.handle,
20620 writtenNode->nodeId,
20621 &writtenNode->value.data.value.value, rangeptr);
20625 if(node->value.dataSource.write) {
20627 retval = node->value.dataSource.write(node->value.dataSource.handle,
20628 node->nodeId, &editableValue.
value, rangeptr);
20647 readIsAbstractAttribute(
const UA_Node *node,
UA_Variant *v) {
20649 switch(node->nodeClass) {
20670 writeIsAbstractAttribute(UA_Node *node,
UA_Boolean value) {
20671 switch(node->nodeClass) {
20694 static const UA_String binEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
20697 #define CHECK_NODECLASS(CLASS) \ 20698 if(!(node->nodeClass & (CLASS))) { \ 20699 retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID; \ 20748 forceVariantSetScalar(&v->
value, &node->description, &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20754 forceVariantSetScalar(&v->
value, &node->userWriteMask, &
UA_TYPES[UA_TYPES_UINT32]);
20757 retval = readIsAbstractAttribute(node, &v->
value);
20767 &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20771 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->containsNoLoops,
20776 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->eventNotifier,
20781 retval = readValueAttributeComplete(server, (
const UA_VariableNode*)node,
20796 retval = readArrayDimensionsAttribute((
const UA_VariableNode*)node, v);
20883 if(request->
maxAge < 0) {
20888 for(
size_t i = 0;i < size;++i) {
20893 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20899 UA_ExtensionObject_init(&additionalHeader);
20904 UA_Variant_init(&variant);
20909 variant.
data = expireArray;
20940 UA_DataValue_init(&dv);
20954 UA_ReadValueId_init(&item);
20966 UA_DataValue_deleteMembers(&dv);
20975 retval = UA_Variant_copy(&dv.
value, v);
21000 #define CHECK_DATATYPE_SCALAR(EXP_DT) \ 21001 if(!wvalue->value.hasValue || \ 21002 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21003 !UA_Variant_isScalar(&wvalue->value.value)) { \ 21004 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21008 #define CHECK_DATATYPE_ARRAY(EXP_DT) \ 21009 if(!wvalue->value.hasValue || \ 21010 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21011 UA_Variant_isScalar(&wvalue->value.value)) { \ 21012 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21016 #define CHECK_NODECLASS_WRITE(CLASS) \ 21017 if((node->nodeClass & (CLASS)) == 0) { \ 21018 retval = UA_STATUSCODE_BADNODECLASSINVALID; \ 21025 CopyAttributeIntoNode(UA_Server *server, UA_Session *session,
21036 UA_QualifiedName_deleteMembers(&node->browseName);
21037 UA_QualifiedName_copy(value, &node->browseName);
21041 UA_LocalizedText_deleteMembers(&node->displayName);
21042 UA_LocalizedText_copy(value, &node->displayName);
21046 UA_LocalizedText_deleteMembers(&node->description);
21047 UA_LocalizedText_copy(value, &node->description);
21051 node->writeMask = *(
const UA_UInt32*)value;
21055 node->userWriteMask = *(
const UA_UInt32*)value;
21059 retval = writeIsAbstractAttribute(node, *(
const UA_Boolean*)value);
21100 retval = writeArrayDimensionsAttribute(server, (
UA_VariableNode*)node,
21140 "WriteRequest returned status code %s",
21141 UA_StatusCode_name(retval));
21183 const void *attr) {
21185 UA_WriteValue_init(&wvalue);
21186 wvalue.
nodeId = *nodeId;
21210 addReference(UA_Server *server, UA_Session *session,
21214 deleteReference(UA_Server *server, UA_Session *session,
21218 deleteNode(UA_Server *server, UA_Session *session,
21229 checkParentReference(UA_Server *server, UA_Session *session,
UA_NodeClass nodeClass,
21240 "AddNodes: Parent node not found");
21247 if(!referenceType) {
21249 "AddNodes: Reference type to the parent not found");
21256 "AddNodes: Reference type to the parent invalid");
21263 "AddNodes: Abstract reference type to the parent not allowed");
21276 "AddNodes: New type node need to have a " 21277 "HasSubType reference");
21281 if(parent->nodeClass != nodeClass) {
21283 "AddNodes: New type node needs to be of the same " 21284 "node type as the parent");
21291 const UA_NodeId hierarchicalReference =
21294 &hierarchicalReference, &subtypeId, 1)) {
21296 "AddNodes: Reference type is not hierarchical");
21308 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21310 UA_InstantiationCallback *instantiationCallback);
21313 copyChildNodesToNode(UA_Server *server, UA_Session *session,
21315 UA_InstantiationCallback *instantiationCallback);
21320 copyExistingVariable(UA_Server *server, UA_Session *session,
const UA_NodeId *variable,
21322 UA_InstantiationCallback *instantiationCallback) {
21332 UA_DataValue_init(&value);
21339 UA_VariableAttributes_init(&attr);
21355 UA_AddNodesItem_init(&item);
21372 UA_AddNodesResult_init(&res);
21373 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21378 retval = copyChildNodesToNode(server, session, &node->nodeId,
21382 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21383 instantiationCallback->handle);
21388 UA_Variant_deleteMembers(&value.
value);
21395 copyExistingObject(UA_Server *server, UA_Session *session,
const UA_NodeId *
object,
21397 UA_InstantiationCallback *instantiationCallback) {
21407 UA_ObjectAttributes_init(&attr);
21415 UA_AddNodesItem_init(&item);
21430 UA_AddNodesResult_init(&res);
21431 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21437 UA_StatusCode retval = copyChildNodesToNode(server, session, &node->nodeId,
21440 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21441 instantiationCallback->handle);
21448 setObjectInstanceHandle(UA_Server *server, UA_Session *session,
21458 instantiateNode(UA_Server *server, UA_Session *session,
const UA_NodeId *nodeId,
21460 UA_InstantiationCallback *instantiationCallback) {
21479 size_t hierarchySize = 0;
21486 for(
size_t i = 0; i < hierarchySize; ++i)
21487 retval |= copyChildNodesToNode(server, session, &hierarchy[i], nodeId, instantiationCallback);
21494 const UA_ObjectLifecycleManagement *olm =
21496 if(olm->constructor)
21504 UA_AddReferencesItem_init(&addref);
21509 return addReference(server, session, &addref);
21515 instanceFindAggregateByBrowsename(UA_Server *server, UA_Session *session,
21520 UA_BrowseDescription_init(&bd);
21521 bd.
nodeId = *searchInstance;
21529 UA_BrowseResult_init(&br);
21539 retval = UA_NodeId_copy(&rd->
nodeId.
nodeId, outInstanceNodeId);
21544 UA_BrowseResult_deleteMembers(&br);
21549 mandatoryChild(UA_Server *server, UA_Session *session,
const UA_NodeId *childNodeId) {
21559 for(
size_t i = 0; i < child->referencesSize; ++i) {
21580 copyChildNodesToNode(UA_Server* server, UA_Session* session,
21582 UA_InstantiationCallback* instantiationCallback) {
21585 UA_BrowseDescription_init(&bd);
21586 bd.
nodeId = *sourceNodeId;
21595 UA_BrowseResult_init(&br);
21607 if(!mandatoryChild(server, session, &rd->
nodeId.
nodeId))
21614 retval = instanceFindAggregateByBrowsename(server, session, destinationNodeId,
21624 UA_AddReferencesItem_init(&newItem);
21630 retval = addReference(server, session, &newItem);
21632 retval = copyExistingVariable(server, session, &rd->
nodeId.
nodeId,
21634 instantiationCallback);
21636 retval = copyExistingObject(server, session, &rd->
nodeId.
nodeId,
21638 instantiationCallback);
21651 retval = copyChildNodesToNode(server, session, &rd->
nodeId.
nodeId,
21652 &existingChild, instantiationCallback);
21654 UA_NodeId_deleteMembers(&existingChild);
21659 UA_BrowseResult_deleteMembers(&br);
21667 UA_InstantiationCallback *instantiationCallback,
21679 UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
21680 parentNodeId, referenceTypeId);
21683 "AddNodes: Checking the reference to the parent returned " 21684 "error code %s", UA_StatusCode_name(retval));
21693 "AddNodes: Node could not be added to the nodestore " 21694 "with error code %s", UA_StatusCode_name(retval));
21700 retval = UA_NodeId_copy(&node->nodeId, addedNodeId);
21703 "AddNodes: Could not copy the nodeid");
21711 UA_AddReferencesItem_init(&item);
21716 retval = addReference(server, session, &item);
21719 "AddNodes: Could not add the reference to the parent" 21720 "with error code %s", UA_StatusCode_name(retval));
21732 typeDefinition = &basedatavariabletype;
21734 typeDefinition = &baseobjecttype;
21738 retval = instantiateNode(server, session, &node->nodeId, node->nodeClass,
21739 typeDefinition, instantiationCallback);
21742 "AddNodes: Could not instantiate the node with" 21743 "error code %s", UA_StatusCode_name(retval));
21749 if(instantiationCallback)
21750 instantiationCallback->method(node->nodeId, *typeDefinition,
21751 instantiationCallback->handle);
21755 deleteNode(server, &adminSession, &node->nodeId,
true);
21768 retval |= UA_QualifiedName_copy(&item->
browseName, &node->browseName);
21769 retval |= UA_LocalizedText_copy(&attr->
displayName, &node->displayName);
21770 retval |= UA_LocalizedText_copy(&attr->
description, &node->description);
21777 copyCommonVariableAttributes(UA_Server *server,
UA_VariableNode *node,
21784 typeDef = &basedatavartype;
21791 node->valueRank = -2;
21806 retval = UA_NodeId_copy(&vt->dataType, &node->dataType);
21819 "Array dimensions incompatible with the VariableType " 21820 "with error code %s", UA_StatusCode_name(retval));
21829 node->valueRank = vt->valueRank;
21832 "Value Rank incompatible with the VariableType " 21833 "with error code %s", UA_StatusCode_name(retval));
21839 UA_DataValue_init(&value);
21849 "Could not read the value of the variable type " 21850 "with error code %s", UA_StatusCode_name(retval));
21859 "Could not set the value of the new node " 21860 "with error code %s", UA_StatusCode_name(retval));
21862 UA_DataValue_deleteMembers(&value);
21867 copyVariableNodeAttributes(UA_Server *server,
UA_VariableNode *vnode,
21874 return copyCommonVariableAttributes(server, vnode, item, attr);
21882 return copyCommonVariableAttributes(server, (
UA_VariableNode*)vtnode, item,
21921 #define CHECK_ATTRIBUTES(TYPE) \ 21922 if(item->nodeAttributes.content.decoded.type != &UA_TYPES[UA_TYPES_##TYPE]) { \ 21923 retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID; \ 21928 createNodeFromAttributes(UA_Server *server,
const UA_AddNodesItem *item, UA_Node **newNode) {
21942 UA_StatusCode retval = copyStandardAttributes(node, item, data);
21946 retval |= copyObjectNodeAttributes(node, data);
21950 retval |= copyVariableNodeAttributes(server, node, item, data);
21954 retval |= copyObjectTypeNodeAttributes(node, data);
21958 retval |= copyVariableTypeNodeAttributes(server, node, item, data);
21962 retval |= copyReferenceTypeNodeAttributes(node, data);
21966 retval |= copyDataTypeNodeAttributes(node, data);
21970 retval |= copyViewNodeAttributes(node, data);
21986 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21988 UA_InstantiationCallback *instantiationCallback) {
21990 UA_Node *node =
NULL;
21991 result->
statusCode = createNodeFromAttributes(server, item, &node);
21994 "Could not add node with error code %s",
22006 "Could not add node with error code %s",
22029 for(
size_t i = 0; i < size; ++i) {
22030 Service_AddNodes_single(server, session, &request->
nodesToAdd[i],
22041 UA_InstantiationCallback *instantiationCallback,
UA_NodeId *outNewNodeId) {
22044 UA_AddNodesItem_init(&item);
22053 .content.decoded = {attributeType, (
void*)(uintptr_t)attr}};
22057 UA_AddNodesResult_init(&result);
22059 Service_AddNodes_single(server, &adminSession, &item, &result, instantiationCallback);
22089 UA_DataValue_init(&value);
22090 if(dataSource.read)
22091 retval = dataSource.read(dataSource.handle, requestedNewNodeId,
22092 false,
NULL, &value);
22105 UA_AddNodesItem_init(&item);
22110 retval |= copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&editAttr);
22111 retval |= copyVariableNodeAttributes(server, node, &item, &editAttr);
22112 UA_DataValue_deleteMembers(&node->value.data.value);
22114 node->value.dataSource = dataSource;
22115 UA_DataValue_deleteMembers(&value);
22124 UA_AddNodesResult_init(&result);
22126 &referenceTypeId, &typeDefinition,
NULL, outNewNodeId);
22131 #ifdef UA_ENABLE_METHODCALLS 22134 UA_Server_addMethodNode(UA_Server *server,
const UA_NodeId requestedNewNodeId,
22137 UA_MethodCallback method,
void *handle,
22138 size_t inputArgumentsSize,
const UA_Argument* inputArguments,
22139 size_t outputArgumentsSize,
const UA_Argument* outputArguments,
22146 UA_AddNodesItem_init(&item);
22149 copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&attr);
22157 UA_NodeId_init(&newMethodId);
22160 &referenceTypeId, &UA_NODEID_NULL,
NULL, &newMethodId);
22168 if(inputArgumentsSize > 0) {
22169 UA_VariableNode *inputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22170 inputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22171 inputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"InputArguments");
22172 inputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22173 inputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22174 inputArgumentsVariableNode->valueRank = 1;
22185 inputArgumentsVariableNode->nodeId =
22189 inputArguments, inputArgumentsSize,
22191 inputArgumentsVariableNode->value.data.value.hasValue =
true;
22195 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22199 if(outputArgumentsSize > 0) {
22201 UA_VariableNode *outputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22202 outputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22203 outputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"OutputArguments");
22204 outputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22205 outputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22206 outputArgumentsVariableNode->valueRank = 1;
22211 outputArgumentsVariableNode->nodeId =
22215 outputArguments, outputArgumentsSize,
22217 outputArgumentsVariableNode->value.data.value.hasValue =
true;
22221 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22226 *outNewNodeId = newMethodId;
22228 UA_NodeId_deleteMembers(&newMethodId);
22239 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22244 addOneWayReference(UA_Server *server, UA_Session *session,
22246 size_t i = node->referencesSize;
22247 size_t refssize = (i+1) | 3;
22251 node->references = new_refs;
22252 UA_ReferenceNode_init(&new_refs[i]);
22257 node->referencesSize = i+1;
22259 UA_ReferenceNode_deleteMembers(&new_refs[i]);
22264 addReference(UA_Server *server, UA_Session *session,
22281 UA_AddReferencesItem_init(&secondItem);
22310 "Processing AddReferencesRequest");
22323 for(
size_t i = 0; i < response->
resultsSize; ++i)
22333 UA_AddReferencesItem_init(&item);
22339 UA_StatusCode retval = addReference(server, &adminSession, &item);
22349 removeReferences(UA_Server *server, UA_Session *session,
const UA_Node *node) {
22351 UA_DeleteReferencesItem_init(&item);
22353 for(
size_t i = 0; i < node->referencesSize; ++i) {
22354 item.
isForward = node->references[i].isInverse;
22355 item.
sourceNodeId = node->references[i].targetId.nodeId;
22357 deleteReference(server, session, &item);
22362 deleteNode(UA_Server *server, UA_Session *session,
22381 if(deleteReferences)
22382 removeReferences(server, session, node);
22391 "Processing DeleteNodesRequest");
22406 response->
results[i] = deleteNode(server, session, &item->
nodeId,
22416 &nodeId, deleteReferences);
22427 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22430 for(
size_t i = node->referencesSize; i > 0; --i) {
22438 UA_ReferenceNode_deleteMembers(ref);
22440 node->references[i-1] = node->references[node->referencesSize-1];
22441 --node->referencesSize;
22448 if(node->referencesSize == 0 && node->references) {
22450 node->references =
NULL;
22456 deleteReference(UA_Server *server, UA_Session *session,
22465 UA_DeleteReferencesItem_init(&secondItem);
22479 "Processing DeleteReferencesRequest");
22509 UA_StatusCode retval = deleteReference(server, &adminSession, &item);
22519 setValueCallback(UA_Server *server, UA_Session *session,
22523 node->value.data.callback = *callback;
22529 const UA_ValueCallback callback) {
22542 setDataSource(UA_Server *server, UA_Session *session,
22547 UA_DataValue_deleteMembers(&node->value.data.value);
22548 node->value.dataSource = *dataSource;
22555 const UA_DataSource dataSource) {
22568 setOLM(UA_Server *server, UA_Session *session,
22578 UA_ObjectLifecycleManagement olm) {
22590 #ifdef UA_ENABLE_METHODCALLS 22592 struct addMethodCallback {
22593 UA_MethodCallback callback;
22598 editMethodCallback(UA_Server *server, UA_Session* session,
22599 UA_Node* node,
const void* handle) {
22602 const struct addMethodCallback *newCallback = handle;
22610 UA_Server_setMethodNode_callback(UA_Server *server,
const UA_NodeId methodNodeId,
22611 UA_MethodCallback method,
void *handle) {
22612 struct addMethodCallback cb = { method, handle };
22615 &methodNodeId, editMethodCallback, &cb);
22632 UA_ReferenceDescription_init(descr);
22639 retval |= UA_NodeClass_copy(&curr->nodeClass, &descr->
nodeClass);
22641 retval |= UA_QualifiedName_copy(&curr->browseName, &descr->
browseName);
22643 retval |= UA_LocalizedText_copy(&curr->displayName, &descr->
displayName);
22646 for(
size_t i = 0; i < curr->referencesSize; ++i) {
22661 static const UA_Node *
22674 for(
size_t i = 0; i < relevant_count; ++i) {
22676 is_relevant =
true;
22689 *isExternal =
false;
22695 UA_ByteString_deleteMembers(&cp->identifier);
22696 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
22716 size_t referencesCount = 0;
22717 size_t referencesIndex = 0;
22722 descr = &cp->browseDescription;
22723 maxrefs = cp->maxReferences;
22724 continuationIndex = cp->continuationIndex;
22736 size_t relevant_refs_size = 0;
22747 &relevant_refs, &relevant_refs_size);
22752 relevant_refs_size = 1;
22766 if(node->referencesSize == 0) {
22774 size_t real_maxrefs = maxrefs;
22775 if(real_maxrefs == 0)
22776 real_maxrefs = node->referencesSize;
22777 else if(real_maxrefs > node->referencesSize)
22778 real_maxrefs = node->referencesSize;
22786 size_t skipped = 0;
22789 for(; referencesIndex < node->referencesSize && referencesCount < real_maxrefs; ++referencesIndex) {
22790 isExternal =
false;
22791 const UA_Node *current =
22792 returnRelevantNode(server, descr, all_refs, &node->references[referencesIndex],
22793 relevant_refs, relevant_refs_size, &isExternal);
22797 if(skipped < continuationIndex) {
22800 retval |= fillReferenceDescription(server->
nodestore, current,
22801 &node->references[referencesIndex],
22809 if(referencesCount == 0) {
22817 &
UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
22831 if(referencesIndex == node->referencesSize) {
22833 removeCp(cp, session);
22836 cp->continuationIndex += (
UA_UInt32)referencesCount;
22839 }
else if(maxrefs != 0 && referencesCount >= maxrefs) {
22843 LIST_FOREACH(cpLoop, &session->continuationPoints, pointers) {
22848 removeCp(cpLast, session);
22858 UA_BrowseDescription_copy(descr, &cp->browseDescription);
22859 cp->maxReferences = maxrefs;
22860 cp->continuationIndex = (
UA_UInt32) referencesCount;
22861 UA_Guid *ident = UA_Guid_new();
22863 cp->identifier.data = (
UA_Byte*) ident;
22864 cp->identifier.length =
sizeof(
UA_Guid);
22895 for(
size_t i = 0; i < size; ++i) {
22904 UA_BrowseResult_init(&result);
22912 UA_Server_browseNext_single(UA_Server *server, UA_Session *session,
UA_Boolean releaseContinuationPoint,
22917 if(UA_ByteString_equal(&cp->identifier, continuationPoint)) {
22919 if(!releaseContinuationPoint)
22922 removeCp(cp, session);
22943 for(
size_t i = 0; i < size; ++i)
22952 UA_BrowseResult_init(&result);
22954 UA_Server_browseNext_single(server, &adminSession, releaseContinuationPoint,
22955 continuationPoint, &result);
22966 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount,
22968 const UA_NodeId *reftypes,
size_t reftypes_count,
22977 for(
size_t j = 0; j < reftypes_count; ++j) {
22996 result->
targets = tempTargets;
22997 (*targetsSize) *= 2;
23005 if(*nextSize <= *nextCount) {
23015 &(*next)[*nextCount]);
23020 walkBrowsePathElement(UA_Server *server, UA_Session *session,
23024 const UA_NodeId *current,
const size_t currentCount,
23025 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23028 size_t reftypes_count = 1;
23045 for(
size_t i = 0; i < currentCount; ++i) {
23057 if(targetName && (targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23063 for(
size_t r = 0; r < node->referencesSize &&
23066 walkBrowsePathElementNodeReference(result, targetsSize, next, nextSize, nextCount,
23068 reftypes, reftypes_count, reference);
23078 addBrowsePathTargets(UA_Server *server, UA_Session *session,
UA_BrowsePathResult *result,
23080 for(
size_t i = 0; i < currentCount; i++) {
23084 UA_NodeId_deleteMembers(¤t[i]);
23090 if(targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23092 UA_NodeId_deleteMembers(¤t[i]);
23105 walkBrowsePath(UA_Server *server, UA_Session *session,
const UA_BrowsePath *path,
23107 UA_NodeId **current,
size_t *currentSize,
size_t *currentCount,
23108 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23118 walkBrowsePathElement(server, session, result, &targetsSize,
23120 *current, *currentCount, next, nextSize, nextCount);
23123 for(
size_t j = 0; j < *currentCount; j++)
23124 UA_NodeId_deleteMembers(&(*current)[j]);
23136 size_t tSize = *currentSize;
size_t tCount = *currentCount;
UA_NodeId *tT = *current;
23137 *currentSize = *nextSize; *currentCount = *nextCount; *current = *next;
23138 *nextSize = tSize; *nextCount = tCount; *next = tT;
23151 if(targetsSize < result->targetsSize + (*currentCount)) {
23157 for(
size_t i = 0; i < *currentCount; ++i)
23158 UA_NodeId_deleteMembers(&(*current)[i]);
23162 result->
targets = newTargets;
23166 addBrowsePathTargets(server, session, result, targetName, *current, *currentCount);
23171 translateBrowsePathToNodeIds(UA_Server *server, UA_Session *session,
23187 size_t targetsSize = 10;
23198 size_t currentSize = 10;
23199 size_t currentCount = 0;
23206 size_t nextSize = 10;
23207 size_t nextCount = 0;
23227 walkBrowsePath(server, session, path, result, targetsSize,
23228 ¤t, ¤tSize, ¤tCount,
23229 &next, &nextSize, &nextCount);
23243 UA_BrowsePathTarget_deleteMembers(&result->
targets[i]);
23254 UA_BrowsePathResult_init(&result);
23256 translateBrowsePathToNodeIds(server, &adminSession, browsePath, &result);
23264 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing TranslateBrowsePathsToNodeIdsRequest");
23278 for(
size_t i = 0; i < size; ++i)
23279 translateBrowsePathToNodeIds(server, session, &request->
browsePaths[i],
23316 #ifdef UA_ENABLE_METHODCALLS 23319 getArgumentsVariableNode(UA_Server *server,
const UA_MethodNode *ofMethod,
23322 for(
size_t i = 0; i < ofMethod->referencesSize; ++i) {
23323 if(ofMethod->references[i].isInverse ==
false &&
23324 UA_NodeId_equal(&hasProperty, &ofMethod->references[i].referenceTypeId)) {
23325 const UA_Node *refTarget =
23330 refTarget->browseName.namespaceIndex == 0 &&
23340 argumentsConformsToDefinition(UA_Server *server,
const UA_VariableNode *argRequirements,
23345 size_t argReqsSize = argRequirements->value.data.value.value.arrayLength;
23348 if(UA_Variant_isScalar(&argRequirements->value.data.value.value))
23350 if(argReqsSize > argsSize)
23352 if(argReqsSize != argsSize)
23356 for(
size_t i = 0; i < argReqsSize; ++i)
23357 retval |=
typeCheckValue(server, &argReqs[i].dataType, argReqs[i].valueRank,
23358 argReqs[i].arrayDimensionsSize, argReqs[i].arrayDimensions,
23359 &args[i],
NULL, &args[i]);
23370 if(!methodCalled) {
23402 for(
size_t i = 0; i < methodCalled->referencesSize; ++i) {
23403 if(methodCalled->references[i].isInverse &&
23404 UA_NodeId_equal(&methodCalled->references[i].targetId.nodeId, &withObject->nodeId)) {
23406 &hasComponentNodeId, &hasSubTypeNodeId, 1);
23418 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"InputArguments"));
23420 if(!inputArguments) {
23426 result->
statusCode = argumentsConformsToDefinition(server, inputArguments,
23436 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"OutputArguments"));
23437 if(outputArguments) {
23448 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23449 methodCallSession = session;
23454 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23455 methodCallSession =
NULL;
23461 void Service_Call(UA_Server *server, UA_Session *session,
23486 UA_CallMethodResult_init(&result);
23501 #ifdef UA_ENABLE_SUBSCRIPTIONS 23503 #define UA_VALUENCODING_MAXSTACK 512 23513 new->subscription =
NULL;
23514 new->currentQueueSize = 0;
23515 new->maxQueueSize = 0;
23518 UA_String_init(&new->indexRange);
23520 UA_NodeId_init(&new->monitoredNodeId);
23522 memset(&new->sampleJobGuid, 0,
sizeof(
UA_Guid));
23523 new->sampleJobIsRegistered =
false;
23534 UA_DataValue_deleteMembers(&val->value);
23537 monitoredItem->currentQueueSize = 0;
23539 UA_String_deleteMembers(&monitoredItem->indexRange);
23540 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23541 UA_NodeId_deleteMembers(&monitoredItem->monitoredNodeId);
23547 if(mon->currentQueueSize < mon->maxQueueSize)
23550 if(mon->discardOldest)
23553 queueItem =
TAILQ_LAST(&mon->queue, QueueOfQueueDataValues);
23556 UA_DataValue_deleteMembers(&queueItem->value);
23558 --mon->currentQueueSize;
23592 if(binsize > UA_VALUENCODING_MAXSTACK &&
23599 size_t encodingOffset = 0;
23601 NULL,
NULL, encoding, &encodingOffset);
23606 encoding->
length = encodingOffset;
23607 if(!mon->lastSampledValue.data || !
UA_String_equal(encoding, &mon->lastSampledValue))
23624 "Subscription %u | MonitoredItem %i | " 23625 "Not a data change notification",
23626 sub->subscriptionID, monitoredItem->itemId);
23632 UA_ReadValueId_init(&rvid);
23633 rvid.
nodeId = monitoredItem->monitoredNodeId;
23635 rvid.
indexRange = monitoredItem->indexRange;
23637 UA_DataValue_init(&value);
23644 valueEncoding.
data = stackValueEncoding;
23645 valueEncoding.
length = UA_VALUENCODING_MAXSTACK;
23649 UA_StatusCode retval = detectValueChange(monitoredItem, &value,
23650 &valueEncoding, &changed);
23656 if(!newQueueItem) {
23658 "Subscription %u | MonitoredItem %i | " 23659 "Item for the publishing queue could not be allocated",
23660 sub->subscriptionID, monitoredItem->itemId);
23665 if(valueEncoding.
data == stackValueEncoding) {
23669 "Subscription %u | MonitoredItem %i | " 23670 "ByteString to compare values could not be created",
23671 sub->subscriptionID, monitoredItem->itemId);
23675 valueEncoding = cbs;
23682 "Subscription %u | MonitoredItem %i | " 23683 "Item for the publishing queue could not be prepared",
23684 sub->subscriptionID, monitoredItem->itemId);
23689 newQueueItem->value = value;
23691 newQueueItem->clientHandle = monitoredItem->clientHandle;
23696 "Subscription %u | MonitoredItem %u | Sampled a new value",
23697 sub->subscriptionID, monitoredItem->itemId);
23700 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23701 monitoredItem->lastSampledValue = valueEncoding;
23704 ensureSpaceInMonitoredItemQueue(monitoredItem);
23706 ++monitoredItem->currentQueueSize;
23710 if(valueEncoding.
data != stackValueEncoding)
23711 UA_ByteString_deleteMembers(&valueEncoding);
23712 UA_DataValue_deleteMembers(&value);
23718 job.
type = UA_JOBTYPE_METHODCALL;
23723 &mon->sampleJobGuid);
23725 mon->sampleJobIsRegistered =
true;
23730 if(!mon->sampleJobIsRegistered)
23732 mon->sampleJobIsRegistered =
false;
23744 new->session = session;
23745 new->subscriptionID = subscriptionID;
23746 new->sequenceNumber = 0;
23747 new->maxKeepAliveCount = 0;
23748 new->publishingEnabled =
false;
23749 memset(&new->publishJobGuid, 0,
sizeof(
UA_Guid));
23750 new->publishJobIsRegistered =
false;
23751 new->currentKeepAliveCount = 0;
23752 new->currentLifetimeCount = 0;
23753 new->lastMonitoredItemId = 0;
23757 new->retransmissionQueueSize = 0;
23774 TAILQ_REMOVE(&subscription->retransmissionQueue, nme, listEntry);
23775 UA_NotificationMessage_deleteMembers(&nme->message);
23778 subscription->retransmissionQueueSize = 0;
23785 if(mon->itemId == monitoredItemID)
23796 if(mon->itemId == monitoredItemID) {
23807 size_t notifications = 0;
23808 if(sub->publishingEnabled) {
23813 if(notifications >= sub->notificationsPerPublish) {
23814 *moreNotifications =
true;
23821 return notifications;
23825 UA_Subscription_addRetransmissionMessage(UA_Server *server,
UA_Subscription *sub,
23828 if(server->config.maxRetransmissionQueueSize > 0 &&
23829 sub->retransmissionQueueSize >= server->config.maxRetransmissionQueueSize) {
23831 TAILQ_LAST(&sub->retransmissionQueue, UA_ListOfNotificationMessages);
23832 TAILQ_REMOVE(&sub->retransmissionQueue, lastentry, listEntry);
23833 --sub->retransmissionQueueSize;
23834 UA_NotificationMessage_deleteMembers(&lastentry->message);
23840 ++sub->retransmissionQueueSize;
23847 if(entry->message.sequenceNumber != sequenceNumber)
23849 TAILQ_REMOVE(&sub->retransmissionQueue, entry, listEntry);
23850 --sub->retransmissionQueueSize;
23851 UA_NotificationMessage_deleteMembers(&entry->message);
23860 size_t notifications) {
23890 if(l >= notifications)
23894 min->
value = qv->value;
23897 --mon->currentQueueSize;
23904 UA_NotificationMessage_deleteMembers(message);
23910 "Publish Callback", sub->subscriptionID);
23914 size_t notifications = countQueuedNotifications(sub, &moreNotifications);
23917 if(notifications == 0) {
23918 ++sub->currentKeepAliveCount;
23919 if(sub->currentKeepAliveCount < sub->maxKeepAliveCount)
23922 "Subscription %u | Sending a KeepAlive",
23923 sub->subscriptionID)
23932 UA_PublishResponseEntry *pre =
SIMPLEQ_FIRST(&sub->session->responseQueue);
23937 "Subscription %u | Cannot send a publish response " 23938 "since the publish queue is empty", sub->subscriptionID)
23942 ++sub->currentLifetimeCount;
23943 if(sub->currentLifetimeCount > sub->lifeTimeCount) {
23945 "End of lifetime for subscription", sub->subscriptionID);
23946 UA_Session_deleteSubscription(server, sub->session, sub->subscriptionID);
23955 if(notifications > 0) {
23958 if(!retransmission) {
23960 "Subscription %u | Could not allocate memory " 23961 "for retransmission", sub->subscriptionID);
23966 prepareNotificationMessage(sub, message, notifications);
23969 "Subscription %u | Could not prepare the " 23970 "notification message", sub->subscriptionID);
23986 if(notifications == 0) {
23997 UA_Subscription_addRetransmissionMessage(server, sub, retransmission);
24001 size_t available = sub->retransmissionQueueSize;
24002 if(available > 0) {
24015 "Subscription %u | Sending out a publish response with %u " 24016 "notifications", sub->subscriptionID, (
UA_UInt32)notifications);
24022 sub->currentKeepAliveCount = 0;
24023 sub->currentLifetimeCount = 0;
24031 if(moreNotifications)
24037 if(sub->publishJobIsRegistered)
24041 "Subscription %u | Register subscription publishing callback",
24042 sub->subscriptionID);
24044 job.
type = UA_JOBTYPE_METHODCALL;
24049 &sub->publishJobGuid);
24051 sub->publishJobIsRegistered =
true;
24057 if(!sub->publishJobIsRegistered)
24060 "Subscription %u | Unregister subscription publishing callback",
24061 sub->subscriptionID);
24062 sub->publishJobIsRegistered =
false;
24072 UA_NodeId_delete(sessionToken);
24075 if(!session ||
LIST_FIRST(&session->serverSubscriptions))
24079 UA_PublishResponseEntry *pre;
24087 UA_PublishResponse_deleteMembers(response);
24101 #ifdef UA_ENABLE_SUBSCRIPTIONS 24103 #define UA_BOUNDEDVALUE_SETWBOUNDS(BOUNDS, SRC, DST) { \ 24104 if(SRC > BOUNDS.max) DST = BOUNDS.max; \ 24105 else if(SRC < BOUNDS.min) DST = BOUNDS.min; \ 24110 setSubscriptionSettings(UA_Server *server,
UA_Subscription *subscription,
24119 "Could not unregister publish job with error code 0x%08x",
24120 subscription->subscriptionID, retval);
24123 subscription->publishingInterval = requestedPublishingInterval;
24124 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.publishingIntervalLimits,
24125 requestedPublishingInterval, subscription->publishingInterval);
24127 if(requestedPublishingInterval != requestedPublishingInterval)
24128 subscription->publishingInterval = server->config.publishingIntervalLimits.min;
24129 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.keepAliveCountLimits,
24130 requestedMaxKeepAliveCount, subscription->maxKeepAliveCount);
24131 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.lifeTimeCountLimits,
24132 requestedLifetimeCount, subscription->lifeTimeCount);
24133 if(subscription->lifeTimeCount < 3 * subscription->maxKeepAliveCount)
24134 subscription->lifeTimeCount = 3 * subscription->maxKeepAliveCount;
24135 subscription->notificationsPerPublish = maxNotificationsPerPublish;
24136 if(maxNotificationsPerPublish == 0 ||
24137 maxNotificationsPerPublish > server->config.maxNotificationsPerPublish)
24138 subscription->notificationsPerPublish = server->config.maxNotificationsPerPublish;
24139 subscription->priority = priority;
24144 "Could not register publish job with error code 0x%08x",
24145 subscription->subscriptionID, retval);
24154 if(!newSubscription) {
24156 "Processing CreateSubscriptionRequest failed");
24160 newSubscription->subscriptionID = UA_Session_getUniqueSubscriptionID(session);
24161 UA_Session_addSubscription(session, newSubscription);
24168 newSubscription->currentKeepAliveCount = newSubscription->maxKeepAliveCount;
24177 "CreateSubscriptionRequest: Created Subscription %u " 24178 "with a publishing interval of %f ms", response->
subscriptionId,
24179 newSubscription->publishingInterval);
24187 "Processing ModifySubscriptionRequest");
24197 sub->currentLifetimeCount = 0;
24208 "Processing SetPublishingModeRequest");
24222 for(
size_t i = 0; i < size; ++i) {
24224 UA_Session_getSubscriptionByID(session, request->
subscriptionIds[i]);
24231 sub->currentLifetimeCount = 0;
24241 mon->monitoringMode = monitoringMode;
24252 samplingInterval < vn->minimumSamplingInterval)
24256 samplingInterval = 10000.0f;
24258 mon->samplingInterval = samplingInterval;
24259 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.samplingIntervalLimits,
24260 samplingInterval, mon->samplingInterval);
24261 if(samplingInterval != samplingInterval)
24262 mon->samplingInterval = server->config.samplingIntervalLimits.min;
24271 mon->trigger = filter->
trigger;
24275 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.queueSizeLimits,
24286 static const UA_String binaryEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
24290 Service_CreateMonitoredItems_single(UA_Server *server, UA_Session *session,
24299 UA_DataValue_init(&v);
24306 UA_DataValue_deleteMembers(&v);
24309 UA_DataValue_deleteMembers(&v);
24333 &newMon->monitoredNodeId);
24339 newMon->subscription = sub;
24341 newMon->itemId = ++(sub->lastMonitoredItemId);
24342 newMon->timestampsToReturn = timestampsToReturn;
24343 setMonitoredItemSettings(server, newMon, request->
monitoringMode,
24363 "Processing CreateMonitoredItemsRequest");
24378 sub->currentLifetimeCount = 0;
24393 Service_CreateMonitoredItems_single(server, session, sub, request->
timestampsToReturn,
24398 Service_ModifyMonitoredItems_single(UA_Server *server, UA_Session *session,
UA_Subscription *sub,
24407 setMonitoredItemSettings(server, mon, mon->monitoringMode,
24417 "Processing ModifyMonitoredItemsRequest");
24433 sub->currentLifetimeCount = 0;
24448 Service_ModifyMonitoredItems_single(server, session, sub, &request->
itemsToModify[i],
24475 for(
size_t i = 0; i < response->
resultsSize; ++i) {
24499 if(
LIST_EMPTY(&session->serverSubscriptions)) {
24504 UA_PublishResponseEntry *entry =
UA_malloc(
sizeof(UA_PublishResponseEntry));
24509 entry->requestId = requestId;
24513 UA_PublishResponse_init(response);
24533 "Cannot process acknowledgements subscription %u",
24548 LIST_FOREACH(immediate, &session->serverSubscriptions, listEntry) {
24551 "Response on a late subscription", immediate->subscriptionID,
24561 UA_PublishResponse_init(&err_response);
24575 "Processing DeleteSubscriptionsRequest");
24603 if(
LIST_FIRST(&session->serverSubscriptions))
24605 UA_NodeId *sessionToken = UA_NodeId_new();
24617 "Processing DeleteMonitoredItemsRequest");
24632 sub->currentLifetimeCount = 0;
24655 sub->currentLifetimeCount = 0;
24659 TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
24683 static void UA_Client_init(
UA_Client* client, UA_ClientConfig config) {
24686 client->
config = config;
24693 UA_Client_init(client, config);
24697 static void UA_Client_deleteMembers(
UA_Client* client) {
24703 UA_UserTokenPolicy_deleteMembers(&client->
token);
24706 UA_String_deleteMembers(&client->
username);
24708 UA_String_deleteMembers(&client->
password);
24709 #ifdef UA_ENABLE_SUBSCRIPTIONS 24710 UA_Client_NotificationsAckNumber *n, *tmp;
24715 UA_Client_Subscription *sub, *tmps;
24717 UA_Client_Subscriptions_forceDelete(client, sub);
24722 UA_Client_deleteMembers(client);
24723 UA_Client_init(client, client->
config);
24727 UA_Client_deleteMembers(client);
24733 return UA_CLIENTSTATE_ERRORED;
24734 return client->
state;
24741 #define UA_MINMESSAGESIZE 8192 24762 retval = UA_TcpHelloMessage_encodeBinary(&hello, &message, &offset);
24763 UA_TcpHelloMessage_deleteMembers(&hello);
24770 retval |= UA_TcpMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24778 retval = conn->
send(conn, &message);
24781 "Sending HEL failed");
24785 "Sent HEL message");
24791 client->
config.timeout);
24794 "Receiving ACK message failed");
24801 retval = UA_TcpMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24802 retval |= UA_TcpAcknowledgeMessage_decodeBinary(&reply, &offset, &ackMessage);
24808 UA_ByteString_deleteMembers(&reply);
24827 UA_TcpAcknowledgeMessage_deleteMembers(&ackMessage);
24848 size_t offset = 12;
24852 UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
24853 asymHeader.
securityPolicyUri = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
24854 retval = UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &message, &offset);
24860 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
24865 retval |= UA_NodeId_encodeBinary(&requestType, &message, &offset);
24869 UA_OpenSecureChannelRequest_init(&opnSecRq);
24875 "Requesting to renew the SecureChannel");
24879 "Requesting to open a SecureChannel");
24884 retval |= UA_OpenSecureChannelRequest_encodeBinary(&opnSecRq, &message, &offset);
24895 retval |= UA_SecureConversationMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24905 retval = conn->
send(conn, &message);
24913 client->
config.timeout);
24916 "Receiving OpenSecureChannelResponse failed");
24922 retval = UA_SecureConversationMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24923 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&reply, &offset, &asymHeader);
24924 retval |= UA_SequenceHeader_decodeBinary(&reply, &offset, &seqHeader);
24925 retval |= UA_NodeId_decodeBinary(&reply, &offset, &requestType);
24929 UA_ByteString_deleteMembers(&reply);
24930 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24931 UA_NodeId_deleteMembers(&requestType);
24933 "Reply answers the wrong request. Expected OpenSecureChannelResponse.");
24942 retval = UA_OpenSecureChannelResponse_decodeBinary(&reply, &offset, &response);
24948 UA_ByteString_deleteMembers(&reply);
24968 "SecureChannel renewed");
24971 "SecureChannel opened");
24975 "SecureChannel could not be renewed " 24976 "with error code %s", UA_StatusCode_name(retval));
24979 "SecureChannel could not be opened " 24980 "with error code %s", UA_StatusCode_name(retval));
24984 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24985 UA_OpenSecureChannelResponse_deleteMembers(&response);
24992 UA_ActivateSessionRequest_init(&request);
25000 UA_AnonymousIdentityToken_init(identityToken);
25007 UA_UserNameIdentityToken_init(identityToken);
25022 "ActivateSession failed with error code %s",
25027 UA_ActivateSessionRequest_deleteMembers(&request);
25028 UA_ActivateSessionResponse_deleteMembers(&response);
25034 GetEndpoints(
UA_Client *client,
size_t* endpointDescriptionsSize,
25037 UA_GetEndpointsRequest_init(&request);
25044 UA_GetEndpointsResponse_init(&response);
25051 "GetEndpointRequest failed with error code %s",
25052 UA_StatusCode_name(retval));
25053 UA_GetEndpointsResponse_deleteMembers(&response);
25056 *endpointDescriptions = response.
endpoints;
25060 UA_GetEndpointsResponse_deleteMembers(&response);
25065 EndpointsHandshake(
UA_Client *client) {
25067 size_t endpointArraySize = 0;
25068 UA_StatusCode retval = GetEndpoints(client, &endpointArraySize, &endpointArray);
25074 UA_String securityNone = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
25075 UA_String binaryTransport = UA_STRING(
"http://opcfoundation.org/UA-Profile/" 25076 "Transport/uatcp-uasc-uabinary");
25079 for(
size_t i = 0; i < endpointArraySize; ++i) {
25091 endpointFound =
true;
25110 UA_UserTokenPolicy_copy(userToken, &client->
token);
25118 if(!endpointFound) {
25120 "No suitable endpoint found");
25122 }
else if(!tokenFound) {
25124 "No suitable UserTokenPolicy found for the possible endpoints");
25133 UA_CreateSessionRequest_init(&request);
25143 UA_CreateSessionResponse_init(&response);
25150 UA_CreateSessionRequest_deleteMembers(&request);
25151 UA_CreateSessionResponse_deleteMembers(&response);
25158 UA_CloseSessionRequest_init(&request);
25168 UA_CloseSessionRequest_deleteMembers(&request);
25169 UA_CloseSessionResponse_deleteMembers(&response);
25174 CloseSecureChannel(
UA_Client *client) {
25177 UA_CloseSecureChannelRequest_init(&request);
25202 UA_CloseSecureChannelRequest_deleteMembers(&request);
25206 size_t offset = 12;
25207 retval |= UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symHeader, &message, &offset);
25208 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
25209 retval |= UA_NodeId_encodeBinary(&typeId, &message, &offset);
25215 retval |= UA_SecureConversationMessageHeader_encodeBinary(&msgHeader, &message, &offset);
25219 retval = conn->
send(conn, &message);
25224 UA_CloseSecureChannelRequest_deleteMembers(&request);
25230 size_t* endpointDescriptionsSize,
25232 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25234 if(client->
state == UA_CLIENTSTATE_ERRORED)
25254 retval = HelAckHandshake(client);
25256 retval = SecureChannelHandshake(client,
false);
25258 retval = GetEndpoints(client, endpointDescriptionsSize, endpointDescriptions);
25269 const char *username,
const char *password){
25279 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25281 if(client->
state == UA_CLIENTSTATE_ERRORED) {
25288 endpointUrl, client->
config.logger);
25301 retval = HelAckHandshake(client);
25303 retval = SecureChannelHandshake(client,
false);
25305 retval = EndpointsHandshake(client);
25307 retval = SessionHandshake(client);
25309 retval = ActivateSession(client);
25312 client->
state = UA_CLIENTSTATE_CONNECTED;
25324 if(client->
state == UA_CLIENTSTATE_READY)
25330 retval = CloseSession(client);
25333 retval |= CloseSecureChannel(client);
25338 UA_StatusCode retval = SecureChannelHandshake(client,
true);
25340 client->
state = UA_CLIENTSTATE_CONNECTED;
25372 "Server replied with an error message: %s %.*s",
25374 retval = msg->
error;
25378 "Server replied with the wrong message type");
25388 "Reply answers the wrong requestId. " 25389 "Async services are not yet implemented.");
25397 retval = UA_NodeId_decodeBinary(message, &offset, &responseId);
25407 "Reply answers the wrong request. Expected ns=%i,i=%i." 25411 UA_NodeId_deleteMembers(&responseId);
25428 "Error receiving the response");
25435 void *response,
const UA_DataType *responseType) {
25436 UA_init(response, responseType);
25443 client->
state = UA_CLIENTSTATE_ERRORED;
25464 client->
state = UA_CLIENTSTATE_FAULTED;
25470 UA_init(response, responseType);
25480 if(now < maxDate) {
25497 UA_ByteString_deleteMembers(&reply);
25515 UA_ReadRequest_init(&request);
25517 UA_ReadValueId_init(&
id);
25534 UA_ReadResponse_deleteMembers(&response);
25548 UA_ReadResponse_deleteMembers(&response);
25556 UA_BrowseRequest_init(&bReq);
25580 UA_BrowseRequest_deleteMembers(&bReq);
25581 UA_BrowseResponse_deleteMembers(&bResp);
25597 UA_AddReferencesItem_init(&item);
25605 UA_AddReferencesRequest_init(&request);
25611 UA_AddReferencesResponse_deleteMembers(&response);
25615 UA_AddReferencesResponse_deleteMembers(&response);
25618 retval = response.
results[0];
25619 UA_AddReferencesResponse_deleteMembers(&response);
25629 UA_DeleteReferencesItem_init(&item);
25636 UA_DeleteReferencesRequest_init(&request);
25642 UA_DeleteReferencesResponse_deleteMembers(&response);
25646 UA_DeleteReferencesResponse_deleteMembers(&response);
25649 retval = response.
results[0];
25650 UA_DeleteReferencesResponse_deleteMembers(&response);
25658 UA_DeleteNodesItem_init(&item);
25662 UA_DeleteNodesRequest_init(&request);
25668 UA_DeleteNodesResponse_deleteMembers(&response);
25672 UA_DeleteNodesResponse_deleteMembers(&response);
25675 retval = response.
results[0];
25676 UA_DeleteNodesResponse_deleteMembers(&response);
25688 UA_AddNodesRequest_init(&request);
25690 UA_AddNodesItem_init(&item);
25705 UA_AddNodesResponse_deleteMembers(&response);
25709 UA_AddNodesResponse_deleteMembers(&response);
25717 UA_AddNodesResponse_deleteMembers(&response);
25725 #ifdef UA_ENABLE_METHODCALLS 25729 const UA_NodeId methodId,
size_t inputSize,
25730 const UA_Variant *input,
size_t *outputSize,
25734 UA_CallRequest_init(&request);
25736 UA_CallMethodRequest_init(&item);
25754 UA_CallResponse_deleteMembers(&response);
25759 if(output !=
NULL && outputSize !=
NULL) {
25765 UA_CallResponse_deleteMembers(&response);
25783 UA_WriteValue_init(&wValue);
25784 wValue.
nodeId = *nodeId;
25793 UA_WriteRequest_init(&wReq);
25807 UA_WriteResponse_deleteMembers(&wResp);
25814 size_t newArrayDimensionsSize) {
25815 if(!newArrayDimensions)
25819 UA_WriteValue_init(&wValue);
25826 UA_WriteRequest_init(&wReq);
25839 UA_WriteResponse_deleteMembers(&wResp);
25852 UA_ReadValueId_init(&item);
25856 UA_ReadRequest_init(&request);
25868 UA_ReadResponse_deleteMembers(&response);
25881 UA_ReadResponse_deleteMembers(&response);
25888 UA_Variant_init(&res->
value);
25891 }
else if(UA_Variant_isScalar(&res->
value) &&
25900 UA_ReadResponse_deleteMembers(&response);
25907 size_t *outArrayDimensionsSize) {
25909 UA_ReadValueId_init(&item);
25913 UA_ReadRequest_init(&request);
25930 else if(!res->
hasValue || UA_Variant_isScalar(&res->
value))
25935 if(UA_Variant_isScalar(&res->
value) ||
25948 UA_ReadResponse_deleteMembers(&response);
25960 #ifdef UA_ENABLE_SUBSCRIPTIONS 25963 UA_Client_Subscriptions_new(
UA_Client *client, UA_SubscriptionSettings settings,
25966 UA_CreateSubscriptionRequest_init(&request);
25972 request.
priority = settings.priority;
25979 UA_Client_Subscription *newSub =
UA_malloc(
sizeof(UA_Client_Subscription));
25991 newSub->priority = request.
priority;
25994 if(newSubscriptionId)
25995 *newSubscriptionId = newSub->subscriptionID;
25998 UA_CreateSubscriptionResponse_deleteMembers(&response);
26005 UA_Client_Subscription *sub;
26006 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26007 if(sub->subscriptionID == subscriptionId)
26014 UA_Client_MonitoredItem *mon, *tmpmon;
26017 UA_Client_Subscriptions_removeMonitoredItem(client, sub->subscriptionID,
26018 mon->monitoredItemId);
26025 UA_DeleteSubscriptionsRequest_init(&request);
26031 retval = response.
results[0];
26032 UA_DeleteSubscriptionsResponse_deleteMembers(&response);
26036 "Could not remove subscription %u with error code %s",
26037 sub->subscriptionID, UA_StatusCode_name(retval));
26041 UA_Client_Subscriptions_forceDelete(client, sub);
26046 UA_Client_Subscriptions_forceDelete(
UA_Client *client,
26047 UA_Client_Subscription *sub) {
26048 UA_Client_MonitoredItem *mon, *mon_tmp;
26050 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26059 UA_Client_Subscriptions_addMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26061 UA_MonitoredItemHandlingFunction hf,
26062 void *hfContext,
UA_UInt32 *newMonitoredItemId) {
26063 UA_Client_Subscription *sub;
26064 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26065 if(sub->subscriptionID == subscriptionId)
26072 UA_Client_MonitoredItem *newMon =
UA_malloc(
sizeof(UA_Client_MonitoredItem));
26078 UA_CreateMonitoredItemsRequest_init(&request);
26081 UA_MonitoredItemCreateRequest_init(&item);
26103 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26109 UA_NodeId_copy(&nodeId, &newMon->monitoredNodeId);
26110 newMon->attributeID = attributeID;
26111 newMon->clientHandle = client->monitoredItemHandles;
26112 newMon->samplingInterval = sub->publishingInterval;
26113 newMon->queueSize = 1;
26114 newMon->discardOldest =
true;
26115 newMon->handler = hf;
26116 newMon->handlerContext = hfContext;
26119 *newMonitoredItemId = newMon->monitoredItemId;
26122 "Created a monitored item with client handle %u",
26123 client->monitoredItemHandles);
26125 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26130 UA_Client_Subscriptions_removeMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26132 UA_Client_Subscription *sub;
26133 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26134 if(sub->subscriptionID == subscriptionId)
26140 UA_Client_MonitoredItem *mon;
26142 if(mon->monitoredItemId == monitoredItemId)
26150 UA_DeleteMonitoredItemsRequest_init(&request);
26158 retval = response.
results[0];
26159 UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
26163 "Could not remove monitoreditem %u with error code %s",
26164 monitoredItemId, UA_StatusCode_name(retval));
26169 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26181 UA_Client_Subscription *sub;
26182 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26190 "Processing a publish response on subscription %u with %u notifications",
26202 UA_Client_NotificationsAckNumber *ack;
26203 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26227 UA_Client_MonitoredItem *mon;
26230 mon->handler(mon->monitoredItemId, &mitemNot->
value, mon->handlerContext);
26236 "Could not process a notification with clienthandle %u on subscription %u",
26242 UA_Client_NotificationsAckNumber *tmpAck =
UA_malloc(
sizeof(UA_Client_NotificationsAckNumber));
26245 "Not enough memory to store the acknowledgement for a " 26246 "publish message on subscription %u", sub->subscriptionID);
26250 tmpAck->subAck.subscriptionId = sub->subscriptionID;
26255 UA_Client_Subscriptions_manuallySendPublishRequest(
UA_Client *client) {
26256 if (client->
state == UA_CLIENTSTATE_ERRORED)
26260 while(moreNotifications) {
26262 UA_PublishRequest_init(&request);
26265 UA_Client_NotificationsAckNumber *ack;
26266 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry)
26276 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26283 UA_Client_processPublishResponse(client, &request, &response);
26286 UA_PublishResponse_deleteMembers(&response);
26287 UA_PublishRequest_deleteMembers(&request);
26303 #define LEAPOCH (946684800LL + 86400*(31+29)) 26305 #define DAYS_PER_400Y (365*400 + 97) 26306 #define DAYS_PER_100Y (365*100 + 24) 26307 #define DAYS_PER_4Y (365*4 + 1) 26311 long long days, secs, years;
26312 int remdays, remsecs, remyears;
26313 int qc_cycles, c_cycles, q_cycles;
26315 int wday, yday, leap;
26316 static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29};
26319 if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL)
26323 days = secs / 86400LL;
26324 remsecs = (int)(secs % 86400);
26330 wday = (int)((3+days)%7);
26331 if (wday < 0) wday += 7;
26341 if (c_cycles == 4) --c_cycles;
26345 if (q_cycles == 25) --q_cycles;
26348 remyears = remdays / 365;
26349 if (remyears == 4) --remyears;
26350 remdays -= remyears * 365;
26352 leap = !remyears && (q_cycles || !c_cycles);
26353 yday = remdays + 31 + 28 + leap;
26354 if (yday >= 365+leap) yday -= 365+leap;
26356 years = remyears + 4*q_cycles + 100*c_cycles + 400LL*qc_cycles;
26358 for (months=0; days_in_month[months] <= remdays; ++months)
26359 remdays -= days_in_month[months];
26361 if (years+100 > INT_MAX || years+100 < INT_MIN)
26364 tm->tm_year = (int)(years + 100);
26365 tm->tm_mon = months + 2;
26366 if (tm->tm_mon >= 12) {
26370 tm->tm_mday = remdays + 1;
26371 tm->tm_wday = wday;
26372 tm->tm_yday = yday;
26374 tm->tm_hour = remsecs / 3600;
26375 tm->tm_min = remsecs / 60 % 60;
26376 tm->tm_sec = remsecs % 60;
26409 rng->
inc = (initseq << 1u) | 1u;
26411 rng->
state += initial_state;
26416 uint64_t oldstate = rng->
state;
26417 rng->
state = oldstate * 6364136223846793005ULL + rng->
inc;
26418 uint32_t xorshifted = (uint32_t)(((oldstate >> 18u) ^ oldstate) >> 27u);
26419 uint32_t rot = (uint32_t)(oldstate >> 59u);
26420 return (xorshifted >> rot) | (xorshifted << ((~rot + 1u) & 31));
26431 #ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS 26432 static const size_t statusCodeDescriptionsSize = 1;
26434 {0xffffffff,
"StatusCode descriptions not available",
"open62541 was compiled without support for statuscode descriptions"}
26437 static const size_t statusCodeDescriptionsSize = 229;
26457 {
UA_STATUSCODE_BADNOTHINGTODO,
"BadNothingToDo",
"There was nothing to do because the client passed a list of operations with no elements."},
26506 {
UA_STATUSCODE_BADNOTFOUND,
"BadNotFound",
"A requested item was not found or a search operation ended without success."},
26538 {
UA_STATUSCODE_BADNOVALIDCERTIFICATES,
"BadNoValidCertificates",
"The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."},
26543 {
UA_STATUSCODE_BADNODEIDREJECTED,
"BadNodeIdRejected",
"The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."},
26563 {
UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE,
"GoodResultsMayBeIncomplete",
"The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."},
26575 {
UA_STATUSCODE_BADTYPEMISMATCH,
"BadTypeMismatch",
"The value supplied for the attribute is not of the same type as the attribute's value."},
26600 {
UA_STATUSCODE_BADDEVICEFAILURE,
"BadDeviceFailure",
"There has been a failure in the device/data source that generates the value that has affected the value."},
26601 {
UA_STATUSCODE_BADSENSORFAILURE,
"BadSensorFailure",
"There has been a failure in the sensor from which the value is derived by the device/data source."},
26610 {
UA_STATUSCODE_UNCERTAINSUBNORMAL,
"UncertainSubNormal",
"The value is derived from multiple sources and has less than the required number of Good sources."},
26632 {
UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED,
"BadTimestampNotSupported",
"The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."},
26637 {
UA_STATUSCODE_GOODMOREDATA,
"GoodMoreData",
"The data or event field was successfully replaced in the historical database."},
26642 {
UA_STATUSCODE_GOODDATAIGNORED,
"GoodDataIgnored",
"The request pecifies fields which are not valid for the EventType or cannot be saved by the historian."},
26644 {
UA_STATUSCODE_GOODEDITED,
"GoodEdited",
"The value does not come from the real source and has been edited by the server."},
26648 {
UA_STATUSCODE_BADDOMINANTVALUECHANGED,
"BadDominantValueChanged",
"The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad."},
26649 {
UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED,
"UncertainDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain."},
26650 {
UA_STATUSCODE_BADDEPENDENTVALUECHANGED,
"BadDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad."},
26668 {0xffffffff,
"Unknown",
"Unknown StatusCode"},
26674 for(
size_t i = 0; i < statusCodeDescriptionsSize; ++i) {
26675 if(statusCodeDescriptions[i].code == code)
26676 return &statusCodeDescriptions[i];
26678 return &statusCodeDescriptions[statusCodeDescriptionsSize-1];
26687 #if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501) 26690 # undef _WIN32_WINDOWS 26691 # undef _WIN32_WINNT 26692 # define WINVER 0x0501 26693 # define _WIN32_WINDOWS 0x0501 26694 # define _WIN32_WINNT 0x0501 26698 #include <stdlib.h> 26700 #include <string.h> 26704 # include <malloc.h> 26707 # ifdef SLIST_ENTRY 26708 # undef SLIST_ENTRY 26711 # define _WINSOCK_DEPRECATED_NO_WARNINGS 26712 # include <winsock2.h> 26713 # include <ws2tcpip.h> 26714 # define CLOSESOCKET(S) closesocket((SOCKET)S) 26715 # define ssize_t int 26716 # define WIN32_INT (int) 26718 # define CLOSESOCKET(S) close(S) 26719 # define SOCKET int 26721 # include <arpa/inet.h> 26722 # include <netinet/in.h> 26723 # include <sys/select.h> 26724 # include <sys/ioctl.h> 26725 # include <fcntl.h> 26726 # include <unistd.h> 26727 # include <netdb.h> 26729 # include <sys/socket.h> 26731 #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 26732 # include <sys/param.h> 26734 # include<sys/socket.h> 26737 # ifndef __CYGWIN__ 26738 # include <netinet/tcp.h> 26744 #if defined(_WIN32) || defined(__OpenBSD__) || \ 26745 (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \ 26746 (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \ 26747 !defined(__GNU_LIBRARY__)) 26748 # define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds) 26749 # define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds) 26751 # define UA_fd_set(fd, fds) FD_SET(fd, fds) 26752 # define UA_fd_isset(fd, fds) FD_ISSET(fd, fds) 26755 #ifdef UA_ENABLE_MULTITHREADING 26756 # include <urcu/uatomic.h> 26760 #define errno__ WSAGetLastError() 26761 # define INTERRUPTED WSAEINTR 26762 # define WOULDBLOCK WSAEWOULDBLOCK 26763 # define AGAIN WSAEWOULDBLOCK 26765 # define errno__ errno 26766 # define INTERRUPTED EINTR 26767 # define WOULDBLOCK EWOULDBLOCK 26768 # define AGAIN EAGAIN 26784 size_t nWritten = 0;
26786 #ifdef MSG_NOSIGNAL 26787 flags = MSG_NOSIGNAL;
26794 size_t bytes_to_send = buf->
length - nWritten;
26798 connection->
close(connection);
26799 socket_close(connection);
26800 UA_ByteString_deleteMembers(buf);
26804 nWritten += (size_t)n;
26805 }
while(nWritten < buf->length);
26806 UA_ByteString_deleteMembers(buf);
26813 if(!response->
data) {
26821 UA_UInt32 timeout_usec = timeout * 1000;
26823 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), timeout_usec % 1000000};
26825 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), (
long int)(timeout_usec % 1000000)};
26827 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26828 (
const char *)&tmptv,
sizeof(
struct timeval));
26830 DWORD timeout_dw = timeout;
26831 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26832 (
const char*)&timeout_dw,
sizeof(DWORD));
26835 UA_ByteString_deleteMembers(response);
26836 socket_close(connection);
26848 UA_UInt32 timeout_usec = timeout * 1000;
26849 struct timeval tmptv = {(
long int)(timeout_usec / 1000000),
26850 (
long int)(timeout_usec % 1000000)};
26851 int retval = select(connection->
sockfd+1, &fdset,
NULL,
NULL, &tmptv);
26853 ret = recv(connection->
sockfd, (
char*)response->
data,
26859 ret = recv(connection->
sockfd, (
char*)response->
data,
26863 ssize_t ret = recv(connection->
sockfd, (
char*)response->
data,
26869 UA_ByteString_deleteMembers(response);
26870 socket_close(connection);
26876 UA_ByteString_deleteMembers(response);
26880 socket_close(connection);
26885 response->
length = (size_t)ret;
26892 if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
26895 int opts = fcntl(sockfd, F_GETFL);
26896 if(opts < 0 || fcntl(sockfd, F_SETFL, opts|O_NONBLOCK) < 0)
26902 static void FreeConnectionCallback(UA_Server *server,
void *ptr) {
26944 #define MAXBACKLOG 100 26969 UA_ByteString_deleteMembers(buf);
26974 UA_ByteString_deleteMembers(buf);
26993 ServerNetworkLayerTCP_closeConnection(
UA_Connection *connection) {
26994 #ifdef UA_ENABLE_MULTITHREADING 27002 #if UA_LOGLEVEL <= 300 27006 "Connection %i | Force closing the connection",
27011 shutdown(connection->
sockfd, 2);
27021 struct sockaddr_in addr;
27022 socklen_t addrlen =
sizeof(
struct sockaddr_in);
27023 int res = getpeername(newsockfd, (
struct sockaddr*)&addr, &addrlen);
27027 "Connection %i | New connection over TCP from %s:%d",
27028 newsockfd, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
27031 "Connection %i | New connection over TCP, " 27032 "getpeername failed with errno %i", newsockfd, errno);
27040 c->
send = socket_write;
27041 c->
close = ServerNetworkLayerTCP_closeConnection;
27051 "No memory for a new Connection");
27069 char hostname[256];
27070 if(gethostname(hostname, 255) == 0) {
27071 char discoveryUrl[256];
27073 du.
length = (size_t)snprintf(discoveryUrl, 255,
"opc.tcp://%s:%d",
27074 hostname, layer->
port);
27076 du.
length = (size_t)_snprintf_s(discoveryUrl, 255, _TRUNCATE,
27077 "opc.tcp://%s:%d", hostname, layer->
port);
27084 SOCKET newsock = socket(PF_INET, SOCK_STREAM, 0);
27086 if(newsock == INVALID_SOCKET)
27092 "Error opening the server socket");
27098 if(setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,
27099 (
const char *)&optval,
sizeof(optval)) == -1 ||
27102 "Error during setting of server socket options");
27108 const struct sockaddr_in serv_addr = {
27109 .sin_family = AF_INET, .sin_addr.s_addr = INADDR_ANY,
27110 .sin_port = htons(layer->
port), .sin_zero = {0}};
27111 if(bind(newsock, (
const struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
27113 "Error during binding of the server socket");
27121 "Error listening on server socket");
27128 "TCP network layer listening on %.*s",
27142 js[c].
type = UA_JOBTYPE_DETACHCONNECTION;
27147 js[c].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27165 size_t totalJobs = removeClosedConnections(layer, js);
27168 fd_set fdset, errset;
27169 UA_Int32 highestfd = setFDSet(layer, &fdset);
27170 setFDSet(layer, &errset);
27171 struct timeval tmptv = {0, timeout * 1000};
27172 UA_Int32 resultsize = select(highestfd+1, &fdset,
NULL, &errset, &tmptv);
27173 if(totalJobs == 0 && resultsize <= 0) {
27184 if(newsockfd != INVALID_SOCKET)
27189 socket_set_nonblocking(newsockfd);
27192 setsockopt(newsockfd, IPPROTO_TCP, TCP_NODELAY, (
void *)&i,
sizeof(i));
27193 ServerNetworkLayerTCP_add(layer, (
UA_Int32)newsockfd);
27200 for(
size_t i = 0; i < layer->
mappingsSize && j < (size_t)resultsize; ++i) {
27209 js[totalJobs + j].
type = UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER;
27214 "Connection %i | Connection closed from remote", c->
sockfd);
27216 js[totalJobs + j].
type = UA_JOBTYPE_DETACHCONNECTION;
27221 js[totalJobs + j].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27222 js[totalJobs + j].
job.
methodCall.method = FreeConnectionCallback;
27229 if(totalJobs == 0) {
27241 "Shutting down the TCP network layer with %d open connection(s)",
27250 items[i*2].
type = UA_JOBTYPE_DETACHCONNECTION;
27252 items[(i*2)+1].type = UA_JOBTYPE_METHODCALL_DELAYED;
27253 items[(i*2)+1].job.
methodCall.method = FreeConnectionCallback;
27274 WORD wVersionRequested;
27276 wVersionRequested = MAKEWORD(2, 2);
27277 WSAStartup(wVersionRequested, &wsaData);
27286 layer->
conf = conf;
27287 layer->
port = port;
27290 nl.
start = ServerNetworkLayerTCP_start;
27291 nl.
getJobs = ServerNetworkLayerTCP_getJobs;
27292 nl.
stop = ServerNetworkLayerTCP_stop;
27302 ClientNetworkLayerGetBuffer(
UA_Connection *connection,
size_t length,
27313 UA_ByteString_deleteMembers(buf);
27318 #ifdef UA_ENABLE_MULTITHREADING 27326 socket_close(connection);
27334 WORD wVersionRequested;
27336 wVersionRequested = MAKEWORD(2, 2);
27337 WSAStartup(wVersionRequested, &wsaData);
27345 connection.
send = socket_write;
27346 connection.
recv = socket_recv;
27347 connection.
close = ClientNetworkLayerClose;
27352 char hostname[512];
27354 const char *path =
NULL;
27360 "Server url is invalid: %s", endpointUrl);
27363 "Server url does not begin with 'opc.tcp://' '%s'",
27371 "No port defined, using standard port %d", port);
27374 struct addrinfo hints, *server;
27375 memset(&hints, 0,
sizeof(hints));
27376 hints.ai_socktype = SOCK_STREAM;
27377 hints.ai_family = AF_INET;
27380 snprintf(portStr, 6,
"%d", port);
27382 _snprintf_s(portStr, 6, _TRUNCATE,
"%d", port);
27384 int error = getaddrinfo(hostname, portStr, &hints, &server);
27385 if(error != 0 || !server) {
27387 "DNS lookup of %s failed with error %s",
27388 hostname, gai_strerror(error));
27393 SOCKET clientsockfd = socket(server->ai_family, server->ai_socktype,
27394 server->ai_protocol);
27396 if(clientsockfd == INVALID_SOCKET) {
27398 if(clientsockfd < 0) {
27401 "Could not create client socket");
27402 freeaddrinfo(server);
27408 error = connect(clientsockfd, server->ai_addr,
WIN32_INT server->ai_addrlen);
27409 freeaddrinfo(server);
27411 ClientNetworkLayerClose(&connection);
27414 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
27415 FORMAT_MESSAGE_FROM_SYSTEM |
27416 FORMAT_MESSAGE_IGNORE_INSERTS,
27417 NULL, WSAGetLastError(),
27418 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
27419 (LPWSTR)&s, 0,
NULL);
27421 "Connection to %s failed. Error: %d: %S",
27422 endpointUrl, WSAGetLastError(), s);
27426 "Connection to %s failed. Error: %d: %s",
27427 endpointUrl, errno, strerror(errno));
27432 #ifdef SO_NOSIGPIPE 27434 int sso_result = setsockopt(connection.
sockfd,
27435 SOL_SOCKET, SO_NOSIGPIPE,
27436 (
void*)&val,
sizeof(val));
27439 "Couldn't set SO_NOSIGPIPE");
27453 # ifdef SLIST_ENTRY 27454 # undef SLIST_ENTRY 27456 # include <windows.h> 27458 # include <sys/time.h> 27461 #if defined(__APPLE__) || defined(__MACH__) 27462 # include <mach/clock.h> 27463 # include <mach/mach.h> 27467 #if defined(_WIN32) 27471 GetSystemTime(&st);
27472 SystemTimeToFileTime(&st, &ft);
27474 ul.LowPart = ft.dwLowDateTime;
27475 ul.HighPart = ft.dwHighDateTime;
27479 gettimeofday(&tv,
NULL);
27485 #if defined(_WIN32) 27486 LARGE_INTEGER freq, ticks;
27487 QueryPerformanceFrequency(&freq);
27488 QueryPerformanceCounter(&ticks);
27491 #elif defined(__APPLE__) || defined(__MACH__) 27493 clock_serv_t cclock;
27494 mach_timespec_t mts;
27495 host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
27496 clock_get_time(cclock, &mts);
27497 mach_port_deallocate(mach_task_self(), cclock);
27499 #elif !defined(CLOCK_MONOTONIC_RAW) 27500 struct timespec ts;
27501 clock_gettime(CLOCK_MONOTONIC, &ts);
27504 struct timespec ts;
27505 clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
27516 #include <stdarg.h> 27518 #ifdef UA_ENABLE_MULTITHREADING 27519 #include <pthread.h> 27520 static pthread_mutex_t printf_mutex = PTHREAD_MUTEX_INITIALIZER;
27523 const char *
LogLevelNames[6] = {
"trace",
"debug",
"info",
"warning",
"error",
"fatal"};
27524 const char *
LogCategoryNames[6] = {
"network",
"channel",
"session",
"server",
"client",
"userland"};
27526 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27528 # pragma GCC diagnostic push 27529 # pragma GCC diagnostic ignored "-Wformat-nonliteral" 27534 const char *msg, va_list args) {
27536 #ifdef UA_ENABLE_MULTITHREADING 27537 pthread_mutex_lock(&printf_mutex);
27539 printf(
"[%.23s] %s/%s\t", t.
data, LogLevelNames[level], LogCategoryNames[category]);
27540 vprintf(msg, args);
27543 #ifdef UA_ENABLE_MULTITHREADING 27544 pthread_mutex_unlock(&printf_mutex);
27546 UA_ByteString_deleteMembers(&t);
27549 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27551 # pragma GCC diagnostic pop 27566 .sendBufferSize = 65535,
27567 .recvBufferSize = 65535,
27568 .maxMessageSize = 0,
27576 #define MANUFACTURER_NAME "open62541" 27577 #define PRODUCT_NAME "open62541 OPC UA Server" 27578 #define PRODUCT_URI "http://open62541.org" 27579 #define APPLICATION_NAME "open62541-based OPC UA Application" 27580 #define APPLICATION_URI "urn:unconfigured:application" 27582 #define UA_STRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)s} 27583 #define UA_STRING_STATIC_NULL {0, NULL} 27585 #define STRINGIFY(arg) #arg 27586 #define VERSION(MAJOR, MINOR, PATCH, LABEL) \ 27587 STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(PATCH) LABEL 27608 .applicationDescription = {
27616 .discoveryUrlsSize = 0,
27617 .discoveryUrls =
NULL },
27621 .networkLayersSize = 0,
27622 .networkLayers =
NULL,
27625 .enableAnonymousLogin =
true,
27626 .enableUsernamePasswordLogin =
true,
27628 .usernamePasswordLoginsSize = 2,
27631 .maxSecureChannels = 40,
27632 .maxSecurityTokenLifetime = 10 * 60 * 1000,
27635 .maxSessions = 100,
27636 .maxSessionTimeout = 60.0 * 60.0 * 1000.0,
27639 .publishingIntervalLimits = { .min = 100.0, .max = 3600.0 * 1000.0 },
27640 .lifeTimeCountLimits = { .max = 15000, .min = 3 },
27641 .keepAliveCountLimits = { .max = 100, .min = 1 },
27642 .maxNotificationsPerPublish = 1000,
27643 .maxRetransmissionQueueSize = 0,
27646 .samplingIntervalLimits = { .min = 50.0, .max = 24.0 * 3600.0 * 1000.0 },
27647 .queueSizeLimits = { .max = 100, .min = 1 }
27656 .secureChannelLifeTime = 10 * 60 * 1000,
27658 .localConnectionConfig = {
27659 .protocolVersion = 0,
27660 .sendBufferSize = 65535,
27661 .recvBufferSize = 65535,
27662 .maxMessageSize = 0,
27671 #ifdef UA_ENABLE_SUBSCRIPTIONS 27673 const UA_SubscriptionSettings UA_SubscriptionSettings_standard = {
27674 .requestedPublishingInterval = 500.0,
27675 .requestedLifetimeCount = 10000,
27676 .requestedMaxKeepAliveCount = 1,
27677 .maxNotificationsPerPublish = 10,
27678 .publishingEnabled =
true,
UA_EndpointDescription * serverEndpoints
UA_SecureChannel * channel
#define UA_NS0ID_BROWSENEXTREQUEST_ENCODING_DEFAULTBINARY
#define LIST_HEAD(name, type)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXQUERYCONTINUATIONPOINTS
#define UA_NS0ID_UNREGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId, const UA_NodeId refTypeId, const UA_ExpandedNodeId targetId, UA_Boolean isForward)
void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session, const UA_TranslateBrowsePathsToNodeIdsRequest *request, UA_TranslateBrowsePathsToNodeIdsResponse *response)
UA_StatusCode UA_Client_connect_username(UA_Client *client, const char *endpointUrl, const char *username, const char *password)
size_t subscriptionIdsSize
UA_ResponseHeader responseHeader
UA_NodeId authenticationToken
#define UA_NS0ID_SERVERTYPE
#define UA_STATUSCODE_BADSHELVINGTIMEOUTOFRANGE
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_MODIFYMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode(* recv)(UA_Connection *connection, UA_ByteString *response, UA_UInt32 timeout)
size_t continuationPointsSize
#define UA_TYPES_SETMONITORINGMODERESPONSE
UA_VariantStorageType storageType
UA_SecureChannelManager secureChannelManager
void UA_Variant_setScalar(UA_Variant *v, void *UA_RESTRICT p, const UA_DataType *type)
#define UA_STATUSCODE_BADDEADBANDFILTERINVALID
#define UA_STATUSCODE_UNCERTAININITIALVALUE
#define UA_EXPORT
Function Export On Win32: Define UA_DYNAMIC_LINKING and UA_DYNAMIC_LINKING_EXPORT in order to export ...
#define UA_NodeStore_newVariableTypeNode()
#define UA_STATUSCODE_BADVIEWPARAMETERMISMATCH
#define UA_NS0ID_ENUMERATION
struct UA_ExtensionObject::@1::@2 encoded
uint32_t UA_UInt32
UInt32 ^^^^^^ An integer value between 0 and 4 294 967 295.
#define UA_TYPES_METHODATTRIBUTES
#define UA_BINARY_OVERLAYABLE_INTEGER
String Manipulation The header string.h is defined in the C-standard.
#define UA_STATUSCODE_BADDEVICEFAILURE
#define UA_NS0ID_FROMSTATE
void UA_SecureChannel_revolveTokens(UA_SecureChannel *channel)
#define UA_NS0ID_SERVERSTATUSDATATYPE
#define UA_TYPES_SIGNATUREDATA
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINSUFFICIENTCLIENTPROFILE
UA_QualifiedName targetName
#define UA_STATUSCODE_BADEVENTFILTERINVALID
#define UA_NS0ID_BUILDINFO
#define container_of(ptr, type, member)
UA_StatusCode UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
ApplicationDescription ^^^^^^^^^^^^^^^^^^^^^^ Describes an application and how to find it...
#define UA_NS0ID_SERVER_VENDORSERVERINFO
void Service_DeleteNodes(UA_Server *server, UA_Session *session, const UA_DeleteNodesRequest *request, UA_DeleteNodesResponse *response)
UA_NodeId referenceTypeId
UA_BrowsePathResult UA_Server_translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath)
#define UA_NS0ID_FINDSERVERSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_QUERYDATASET
#define UA_OPEN62541_VER_LABEL
#define UA_STATUSCODE_BADSERVERNOTCONNECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME
#define UA_NS0ID_ORGANIZES
#define UA_STATUSCODE_UNCERTAINDATASUBNORMAL
UA_ApplicationType
ApplicationType ^^^^^^^^^^^^^^^ The types of applications.
const UA_EXPORT UA_ConnectionConfig UA_ConnectionConfig_standard
UA_StatusCode UA_NodeStore_remove(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_MonitoredItemNotification * monitoredItems
#define UA_STATUSCODE_GOODDATAIGNORED
#define UA_STATUSCODE_BADENCODINGERROR
#define UA_TYPES_DELETEMONITOREDITEMSREQUEST
#define UA_TYPES_SETPUBLISHINGMODEREQUEST
void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub)
#define UA_TYPES_MODIFYMONITOREDITEMSREQUEST
#define UA_STATUSCODE_BADCERTIFICATEINVALID
UA_ByteString incompleteMessage
#define UA_TYPES_DELETEREFERENCESITEM
void(* UA_Service)(UA_Server *, UA_Session *, const void *request, void *response)
UA_StatusCode innerStatusCode
UA_NodeStore * UA_NodeStore_new(void)
Nodestore Lifecycle ^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE
#define LIST_NEXT(elm, field)
UA_AddNodesItem * nodesToAdd
UA_MonitoredItem * UA_MonitoredItem_new(void)
UA_Boolean UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2)
AddReferencesItem ^^^^^^^^^^^^^^^^^ A request to add a reference to the server address space...
UA_StatusCode UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_TYPES_READVALUEID
#define UA_TYPES_BROWSEPATH
UA_Boolean containsNoLoops
UA_ByteString serverCertificate
void UA_Client_reset(UA_Client *client)
#define UA_NS0ID_REFERENCETYPESFOLDER
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
RelativePath ^^^^^^^^^^^^ A relative path constructed from reference types and browse names...
TranslateBrowsePathsToNodeIdsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more path...
UA_QualifiedName browseName
#define UA_STATUSCODE_BADCONDITIONALREADYDISABLED
struct UA_NodeStoreEntry * orig
UA_DeleteNodesItem * nodesToDelete
#define UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED
#define UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED
UA_String UA_ByteString
ByteString ^^^^^^^^^^ A sequence of octets.
#define UA_STATUSCODE_BADINDEXRANGEINVALID
#define UA_NS0ID_QUALIFIEDNAME
UA_StatusCode UA_Client_manuallyRenewSecureChannel(UA_Client *client)
UA_UInt32 * subscriptionIds
UA_StatusCode Subscription_unregisterPublishJob(UA_Server *server, UA_Subscription *sub)
#define UA_STATUSCODE_BADCERTIFICATEUNTRUSTED
void(* UA_deleteMembersSignature)(void *p, const UA_DataType *type)
CreateSessionRequest ^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
UA_String securityPolicyUri
void UA_Server_deleteAllRepeatedJobs(UA_Server *server)
#define UA_NS0ID_OBJECTSFOLDER
#define MAXBACKLOG
For the multithreaded mode, assume a single thread that periodically "gets work" from the network lay...
struct UA_ExtensionObject::@1::@3 decoded
#define UA_STATUSCODE_BADCONTINUATIONPOINTINVALID
QueryFirstRequest ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION
UA_StatusCode UA_Server_editNode(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId, UA_EditNodeCallback callback, const void *data)
#define UA_TYPES_GUID
Guid ^^^^.
#define UA_STATUSCODE_BADCONDITIONDISABLED
FindServersRequest ^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
#define UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST_ENCODING_DEFAULTBINARY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADOUTOFSERVICE
#define TAILQ_REMOVE(head, elm, field)
AddNodesItem ^^^^^^^^^^^^ A request to add a node to the server address space.
#define UA_STATUSCODE_BADCONNECTIONREJECTED
struct ServerNetworkLayerTCP::ConnectionMapping * mappings
UA_ExtensionObjectEncoding encoding
UA_ByteString continuationPoint
void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *message)
#define UA_NodeStore_newObjectTypeNode()
#define CHECK_NODECLASS(CLASS)
CreateMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_Job::@5::@6 binaryMessage
#define TAILQ_FOREACH(var, head, field)
UA_StatusCode UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri, UA_UInt16 *namespaceIndex)
#define CHECK_DATATYPE_ARRAY(EXP_DT)
ServiceFault ^^^^^^^^^^^^ The response returned by all services when there is a service level error...
#define UA_NS0ID_CREATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE
#define UA_STATUSCODE_BADDISCONNECT
#define UA_NS0ID_VARIABLETYPESFOLDER
UA_StatusCode UA_SecureChannel_processChunks(UA_SecureChannel *channel, const UA_ByteString *chunks, UA_ProcessMessageCallback callback, void *application)
#define UA_TYPES_WRITEREQUEST
UA_CallMethodResult UA_EXPORT UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request)
Method Call
#define UA_STATUSCODE_BADINTERNALERROR
UA_MonitoringMode
MonitoringMode ^^^^^^^^^^^^^^.
CreateSubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_MonitoredItem UA_MonitoredItem
UA_ChannelSecurityToken securityToken
#define UA_TYPES_ACTIVATESESSIONREQUEST
#define UA_TYPES_GETENDPOINTSREQUEST
bool UA_Boolean
Boolean ^^^^^^^ A two-state logical value (true or false).
#define UA_TYPES_DATAVALUE
DataValue ^^^^^^^^^.
void UA_Client_delete(UA_Client *client)
#define UA_NS0ID_BASEDATATYPE
#define UA_STATUSCODE_UNCERTAINREFERENCEOUTOFSERVER
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_INT16
Int16 ^^^^^.
#define SIMPLEQ_ENTRY(type)
#define UA_TRANSPORT_TCPHELLOMESSAGE
UA_DateTime UA_DateTime_now(void)
DataTypeAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a data type node.
#define UA_INLINE
Inline Functions
UA_UInt32 revisedLifetime
TcpAcknowledgeMessage ^^^^^^^^^^^^^^^^^^^^^ Acknowledge Message.
UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_Session **session)
UA_StatusCode UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_VariableAttributes attr, const UA_DataSource dataSource, UA_NodeId *outNewNodeId)
UA_StatusCode UA_Client_connect(UA_Client *client, const char *endpointUrl)
UA_StatusCode UA_Client_disconnect(UA_Client *client)
const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL
#define UA_TYPES_PUBLISHREQUEST
struct MonitoredItem_queuedValue MonitoredItem_queuedValue
const UA_DataType * responseType
UA_RelativePathElement * elements
QueryNextRequest ^^^^^^^^^^^^^^^^.
UA_StatusCode UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
#define UA_STATUSCODE_BADNODEIDUNKNOWN
#define UA_TYPES_OPENSECURECHANNELREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS_STATE
#define UA_STATUSCODE_BADWOULDBLOCK
UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node)
Insert / Get / Replace / Remove ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_HASENCODING
#define UA_NS0ID_NONHIERARCHICALREFERENCES
SignatureData ^^^^^^^^^^^^^ A digital signature.
#define UA_TYPES_CLOSESECURECHANNELRESPONSE
DeleteSubscriptionsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADINDEXRANGENODATA
UA_Node * UA_NodeStore_getCopy(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_Double revisedSessionTimeout
#define UA_STATUSCODE_GOODENTRYREPLACED
size_t UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number)
size_t subscriptionIdsSize
UA_UserTokenType tokenType
#define UA_TYPES_WRITERESPONSE
#define UA_STATUSCODE_BADMONITOREDITEMFILTERINVALID
double UA_Double
Double ^^^^^^ An IEEE double precision (64 bit) floating point value.
MonitoredItemModifyResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG,...)
#define SLIST_FOREACH_SAFE(var, head, field, tvar)
UA_MonitoredItemCreateResult * results
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADSTATENOTACTIVE
#define UA_STATUSCODE_BADTARGETNODEIDINVALID
#define SLIST_REMOVE(head, elm, type, field)
#define UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADDIALOGNOTACTIVE
#define UA_NS0ID_HASMODELLINGRULE
UA_StatusCode __UA_Server_read(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, void *v)
#define UA_NS0ID_SERVER_AUDITING
#define UA_STATUSCODE_BADBROWSENAMEDUPLICATED
#define UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT
ReferenceDescription ^^^^^^^^^^^^^^^^^^^^ The description of a reference.
UA_UInt16 sourcePicoseconds
#define UA_TYPES_USERIDENTITYTOKEN
#define UA_STATUSCODE_BADINVALIDSELFREFERENCE
#define UA_STATUSCODE_GOODMOREDATA
#define SLIST_ENTRY(type)
UA_ResponseHeader responseHeader
UA_String transportProfileUri
#define UA_STATUSCODE_BADTOOMANYMATCHES
#define UA_NS0ID_SERVER_SERVERREDUNDANCY
void Service_UnregisterNodes(UA_Server *server, UA_Session *session, const UA_UnregisterNodesRequest *request, UA_UnregisterNodesResponse *response)
#define UA_TYPES_INT32
Int32 ^^^^^.
#define UA_NodeStore_newReferenceTypeNode()
#define UA_STATUSCODE_BADRESPONSETOOLARGE
#define UA_NS0ID_ADDREFERENCESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADUSERSIGNATUREINVALID
const UA_ObjectTypeNode * getObjectNodeType(UA_Server *server, const UA_ObjectNode *node)
BrowseNextRequest ^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
UA_ResponseHeader responseHeader
size_t UA_calcSizeBinary(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADREFERENCETYPEIDINVALID
UA_Guid UA_Guid_random(void)
UA_StatusCode MonitoredItem_registerSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOKED
#define UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID
#define SIMPLEQ_FIRST(head)
UA_BrowsePathResult * results
const UA_encodeBinarySignature encodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
UA_StatusCode getTypeHierarchy(UA_NodeStore *ns, const UA_Node *rootRef, UA_Boolean inverse, UA_NodeId **typeHierarchy, size_t *typeHierarchySize)
UA_Boolean publishingEnabled
#define UA_TYPES_COUNT
Every type is assigned an index in an array containing the type descriptions.
UA_Session * UA_SecureChannel_getSession(UA_SecureChannel *channel, UA_NodeId *token)
UA_ResponseHeader responseHeader
#define UA_OPEN62541_VER_MAJOR
Library Version
#define UA_NS0ID_HASPROPERTY
DeleteReferencesRequest ^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server address...
Argument ^^^^^^^^ An argument for a method.
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE
size_t subscriptionAcknowledgementsSize
UA_Boolean publishingEnabled
#define UA_NS0ID_HASDESCRIPTION
UA_UInt16 memberTypeIndex
UserNameIdentityToken ^^^^^^^^^^^^^^^^^^^^^ A token representing a user identified by a user name and...
UA_UInt32 * arrayDimensions
UA_StatusCode writeDataTypeAttribute(UA_Server *server, UA_VariableNode *node, const UA_NodeId *dataType, const UA_NodeId *constraintDataType)
#define UA_TYPES_CLOSESESSIONRESPONSE
#define UA_NS0ID_MODIFYSUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel, UA_Session *session, const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response)
#define UA_STATUSCODE_BADNOCONTINUATIONPOINTS
UA_StatusCode UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_HASORDEREDCOMPONENT
#define UA_TYPES_DATACHANGEFILTER
#define UA_STATUSCODE_BADTYPEMISMATCH
UA_RequestHeader requestHeader
UA_BrowseDirection browseDirection
UA_NodeId referenceTypeId
#define UA_STATUSCODE_BADTCPINTERNALERROR
#define UA_STATUSCODE_BADTCPMESSAGETOOLARGE
void * UA_Array_new(size_t size, const UA_DataType *type)
CallMethodResult ^^^^^^^^^^^^^^^^.
#define UA_TYPES_UINT32
UInt32 ^^^^^^.
UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char *name)
UA_StatusCode compatibleArrayDimensions(size_t constraintArrayDimensionsSize, const UA_UInt32 *constraintArrayDimensions, size_t testArrayDimensionsSize, const UA_UInt32 *testArrayDimensions)
TcpErrorMessage ^^^^^^^^^^^^^^^ Error Message.
#define UA_STATUSCODE_BADNOTIMPLEMENTED
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Byte accessLevel
UA_ExtensionObjectEncoding
UA_VARIANT_ENCODINGMASKTYPE
#define UA_TYPES_BYTESTRING
ByteString ^^^^^^^^^^.
SignedSoftwareCertificate ^^^^^^^^^^^^^^^^^^^^^^^^^ A software certificate with a digital signature...
#define UA_STATUSCODE_BADVIEWIDUNKNOWN
#define UA_STATUSCODE_BADNODEATTRIBUTESINVALID
#define UA_TYPES_UINT64
UInt64 ^^^^^^.
UA_LocalizedText displayName
#define UA_STATUSCODE_BADDATALOST
#define UA_STATUSCODE_BADDEPENDENTVALUECHANGED
#define UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN
UA_Boolean UA_Node_hasSubTypeOrInstances(const UA_Node *node)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYCLIENT
#define UA_STATUSCODE_BADCERTIFICATEHOSTNAMEINVALID
#define UA_STATUSCODE_GOODCALLAGAIN
UA_UInt32 maxRequestMessageSize
UA_String UA_String_fromChars(char const src[])
#define CHECK_NODECLASS_WRITE(CLASS)
const UA_DataType * UA_findDataType(const UA_NodeId *typeId)
Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is the name of the data type...
#define UA_STATUSCODE_BADDATAENCODINGINVALID
UA_StatusCode UA_SecureChannel_generateNonce(UA_ByteString *nonce)
const UA_NodeId UA_NODEID_NULL
UA_ExtensionObject filter
#define UA_STATUSCODE_BADCERTIFICATECHAININCOMPLETE
#define UA_STATUSCODE_BADSESSIONIDINVALID
uint16_t UA_UInt16
UInt16 ^^^^^^ An integer value between 0 and 65 535.
#define UA_STATUSCODE_BADBROWSENAMEINVALID
#define UA_STATUSCODE_GOODNODATA
#define UA_NS0ID_UINTEGER
#define UA_NS0ID_HASCAUSE
UA_LocalizedText inverseName
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBROWSECONTINUATIONPOINTS
#define UA_NS0ID_BASEDATAVARIABLETYPE
UA_ExtensionObject nodeAttributes
UA_Boolean hasLocalizedText
OpenSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
void Service_Read_single(UA_Server *server, UA_Session *session, UA_TimestampsToReturn timestamps, const UA_ReadValueId *id, UA_DataValue *v)
UA_ClientState UA_Client_getState(UA_Client *client)
UA_StatusCode UA_Server_delayedFree(UA_Server *server, void *data)
#define UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED
UA_Boolean hasSourcePicoseconds
struct UA_DiagnosticInfo * innerDiagnosticInfo
AddNodesRequest ^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG,...)
#define UA_TYPES_CREATESUBSCRIPTIONREQUEST
#define UA_NS0ID_VIEWSFOLDER
#define UA_TYPES_CALLMETHODRESULT
UA_AsymmetricAlgorithmSecurityHeader clientAsymAlgSettings
#define UA_TYPES_PUBLISHRESPONSE
UA_QualifiedName browseName
UA_SecurityTokenRequestType requestType
#define ADDPROFILEARRAY(x)
UA_StatusCode UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_UInt32 monitoredItemID)
UA_UInt32 protocolVersion
#define UA_TYPES_RELATIVEPATH
UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
#define UA_NS0ID_GENERATESEVENT
#define UA_NS0ID_GETENDPOINTSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_BROWSERESPONSE
#define UA_TYPES_FINDSERVERSRESPONSE
#define UA_STATUSCODE_BADTIMEOUT
UA_Double revisedPublishingInterval
#define UA_TYPES_MODIFYSUBSCRIPTIONREQUEST
AddNodesResponse ^^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_STATUSCODE_BADNOVALIDCERTIFICATES
#define UA_TYPES_SBYTE
SByte ^^^^^.
#define UA_TYPES_ADDNODESITEM
void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session, const UA_DeleteMonitoredItemsRequest *request, UA_DeleteMonitoredItemsResponse *response)
SetPublishingModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
UA_NodeId referenceTypeId
const UA_Guid UA_GUID_NULL
#define UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED
UA_String * discoveryUrls
#define UA_TYPES_DELETENODESRESPONSE
UA_ByteString serverNonce
UA_BrowseResult UA_Server_browse(UA_Server *server, UA_UInt32 maxrefs, const UA_BrowseDescription *descr)
Browsing
UA_Double requestedPublishingInterval
#define TAILQ_LAST(head, headname)
UA_StatusCode readValueAttribute(UA_Server *server, const UA_VariableNode *vn, UA_DataValue *v)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYREQUEST
void UA_NodeStore_deleteNode(UA_Node *node)
#define UA_NS0ID_SERVERCAPABILITIESTYPE
RegisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a ses...
UA_ResponseHeader responseHeader
UA_MonitoredItemModifyResult * results
size_t registeredNodeIdsSize
DeleteMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_StatusCode writeValueAttribute(UA_Server *server, UA_VariableNode *node, const UA_DataValue *value, const UA_String *indexRange)
#define UA_TYPES_CONTENTFILTER
#define UA_TRANSPORT_MESSAGETYPE
UA_UInt32 secondsTillShutdown
#define UA_NS0ID_PUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_ARGUMENT
#define TAILQ_INSERT_HEAD(head, elm, field)
void UA_Array_delete(void *p, size_t size, const UA_DataType *type)
#define UA_STATUSCODE_BADNOTCONNECTED
#define UA_TYPES_ADDREFERENCESITEM
#define UA_STATUSCODE_BADSERVERHALTED
ContentFilterResult ^^^^^^^^^^^^^^^^^^^.
ReferenceNode ^^^^^^^^^^^^^ Specifies a reference which belongs to a node.
#define UA_TYPES_MESSAGESECURITYMODE
UA_DataChangeTrigger trigger
UA_EndpointDescription * endpoints
UA_ByteString clientNonce
UA_AddReferencesItem * referencesToAdd
#define UA_STATUSCODE_BADREQUESTTIMEOUT
UA_Boolean includeSubtypes
#define UA_NS0ID_HASCOMPONENT
#define UA_STATUSCODE_BADOUTOFRANGE
#define UA_STATUSCODE_BADQUERYTOOCOMPLEX
UA_UInt32 retransmitSequenceNumber
UA_ExpandedNodeId typeDefinition
#define UA_STATUSCODE_BADHISTORYOPERATIONINVALID
UA_StatusCode Subscription_registerPublishJob(UA_Server *server, UA_Subscription *sub)
UA_MonitoringParameters requestedParameters
GetEndpointsResponse ^^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
#define UA_STATUSCODE_BADREFRESHINPROGRESS
UA_ApplicationDescription * servers
#define UA_TYPES_ADDNODESREQUEST
UA_ChannelSecurityToken securityToken
#define UA_TYPES_CREATESESSIONRESPONSE
CallResponse ^^^^^^^^^^^^.
uint64_t UA_UInt64
UInt64 ^^^^^^ An integer value between 0 and 18 446 744 073 709 551 615.
#define UA_TYPES_DELETEREFERENCESRESPONSE
#define UA_STATUSCODE_BADFILTERELEMENTINVALID
#define UA_NODEIDTYPE_NUMERIC_TWOBYTE
#define TAILQ_ENTRY(type)
UA_StatusCode UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId, const UA_DataSource dataSource)
#define UA_STATUSCODE_BADDIALOGRESPONSEINVALID
UA_StatusCode(* UA_exchangeEncodeBuffer)(void *handle, UA_ByteString *buf, size_t offset)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI
SecureConversationMessageAbortBody ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Secure Conversation Message Abo...
SetMonitoringModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADMONITOREDITEMIDINVALID
#define UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED
#define UA_TYPES_FLOAT
Float ^^^^^.
#define UA_STATUSCODE_BADTOOMANYSESSIONS
#define UA_STATUSCODE_BADIDENTITYCHANGENOTSUPPORTED
UA_Double revisedPublishingInterval
UA_Boolean containsNoLoops
void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
SecureChannel Service Set This Service Set defines Services used to open a communication channel that...
#define UA_TYPES_REPUBLISHRESPONSE
UA_Boolean deleteBidirectional
UA_DateTime sourceTimestamp
size_t(* getJobs)(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt16 timeout)
UA_DateTime nextChannelRenewal
#define UA_TYPES_MONITOREDITEMMODIFYREQUEST
UA_NodeId authenticationToken
#define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG,...)
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_OUTPUTARGUMENTS
void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server *server)
#define UA_STATUSCODE_GOODNONCRITICALTIMEOUT
DeleteNodesRequest ^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_TYPES_READRESPONSE
#define UA_STATUSCODE_BADNOTSUPPORTED
ContentFilter ^^^^^^^^^^^^^.
UA_Variant * inputArguments
UA_Server * UA_Server_new(const UA_ServerConfig config)
#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG,...)
SetPublishingModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
status(* UA_decodeBinarySignature)(void *UA_RESTRICT dst, const UA_DataType *type)
UA_MessageSecurityMode securityMode
#define UA_NODESTORE_TOMBSTONE
#define UA_STATUSCODE_BADNODEIDEXISTS
size_t userIdentityTokensSize
#define UA_TYPES_MONITOREDITEMCREATEREQUEST
#define UA_STATUSCODE_UNCERTAINSENSORNOTACCURATE
const UA_decodeBinarySignature decodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NS0ID_WRITEREQUEST_ENCODING_DEFAULTBINARY
size_t notificationDataSize
UA_EndpointDescription * endpointDescriptions
UA_MonitoringParameters requestedParameters
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINVALIDTIMESTAMPARGUMENT
UA_StatusCode UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, const UA_UInt32 *newArrayDimensions, size_t newArrayDimensionsSize)
UA_ResponseHeader responseHeader
QueryDataSet ^^^^^^^^^^^^.
#define UA_TYPES_READREQUEST
void UA_NodeStore_iterate(UA_NodeStore *ns, UA_NodeStore_nodeVisitor visitor)
const UA_EXPORT UA_ClientConfig UA_ClientConfig_standard
#define UA_STATUSCODE_BADAGGREGATELISTMISMATCH
#define UA_STATUSCODE_BADOPERATIONABANDONED
void UA_SecureChannel_init(UA_SecureChannel *channel)
#define UA_TYPES_USERNAMEIDENTITYTOKEN
UA_StatusCode __UA_Server_write(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, const UA_DataType *attr_type, const void *attr)
#define SLIST_INSERT_HEAD(head, elm, field)
UA_ObjectLifecycleManagement lifecycleManagement
#define UA_TYPES_BROWSEREQUEST
#define UA_STATUSCODE_BADREFERENCELOCALONLY
#define UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED
#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG
void Service_Call(UA_Server *server, UA_Session *session, const UA_CallRequest *request, UA_CallResponse *response)
void UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm, UA_DateTime nowMonotonic)
UA_UInt32 requestedMaxReferencesPerNode
ReferenceTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^^ The attributes for a reference type node...
#define UA_STATUSCODE_BADTOOMANYOPERATIONS
DeleteNodesResponse ^^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_STATUSCODE_GOODDEPENDENTVALUECHANGED
UA_NodeClass targetNodeClass
UA_ExpandedNodeId typeDefinition
#define UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANCYSUPPORT
UA_Connection * connection
UA_ResponseHeader responseHeader
TranslateBrowsePathsToNodeIdsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more pa...
#define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG,...)
size_t nodesToRegisterSize
UA_Connection UA_ClientConnectionTCP(UA_ConnectionConfig conf, const char *endpointUrl, UA_Logger logger)
UA_Node * UA_NodeStore_newNode(UA_NodeClass nodeClass)
Node Lifecycle ^^^^^^^^^^^^^^.
#define UA_NS0ID_DATATYPESFOLDER
UA_Boolean isNodeInTree(UA_NodeStore *ns, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds, size_t referenceTypeIdsSize)
#define UA_STATUSCODE_BADMESSAGENOTAVAILABLE
#define UA_TYPES_ADDNODESRESPONSE
void Service_Publish(UA_Server *server, UA_Session *session, const UA_PublishRequest *request, UA_UInt32 requestId)
UA_StatusCode UA_Variant_setRangeCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_NumericRange range)
#define UA_TYPES_PARSINGRESULT
#define UA_PRINTF_GUID_DATA(GUID)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MINSUPPORTEDSAMPLERATE
void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm)
#define UA_ASSERT_RCU_UNLOCKED()
#define UA_SEC_TO_DATETIME
void(* UA_ServerCallback)(UA_Server *server, void *data)
UA_UInt32 maxResponseMessageSize
UA_StatusCode UA_Server_run_startup(UA_Server *server)
ViewDescription ^^^^^^^^^^^^^^^ The view to browse.
#define UA_NS0ID_REFERENCES
#define UA_NS0ID_DELETENODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADREQUESTINTERRUPTED
void(* UA_NodeStore_nodeVisitor)(const UA_Node *node)
Iteration ^^^^^^^^^ The following definitions are used to call a callback for every node in the nodes...
#define UA_TYPES_STRING
String ^^^^^^.
uint32_t pcg32_random_r(pcg32_random_t *rng)
RepublishResponse ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_LOCALIZEDTEXT
CreateSubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
BrowseResponse ^^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address spa...
float UA_Float
Float ^^^^^ An IEEE single precision (32 bit) floating point value.
#define UA_NS0ID_HASMODELPARENT
UA_Boolean hasServerTimestamp
UA_NodeStoreEntry ** entries
#define UA_STATUSCODE_BADNOTFOUND
UA_ResponseHeader responseHeader
UA_LocalizedText description
UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_STATUSCODE_BADSERVERNAMEMISSING
#define UA_STATUSCODE_BADDATAUNAVAILABLE
void Service_Browse(UA_Server *server, UA_Session *session, const UA_BrowseRequest *request, UA_BrowseResponse *response)
UA_Session * UA_SessionManager_getSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_XMLELEMENT
void __UA_Client_Service(UA_Client *client, const void *request, const UA_DataType *requestType, void *response, const UA_DataType *responseType)
UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst, const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_String UA_DateTime_toString(UA_DateTime t)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER
#define UA_NS0ID_SERVERDIAGNOSTICSTYPE
#define UA_NS0ID_DELETEREFERENCESREQUEST_ENCODING_DEFAULTBINARY
UA_UInt32 requestedLifetimeCount
void MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem)
#define UA_TYPES_BROWSENEXTREQUEST
UA_Connection * connection
#define VERSION(MAJOR, MINOR, PATCH, LABEL)
void UA_Log_Stdout(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
UA_ResponseHeader responseHeader
UA_MessageSecurityMode securityMode
void UA_Connection_deleteMembers(UA_Connection *connection)
UA_StatusCode UA_EndpointUrl_split_ptr(const char *endpointUrl, char *hostname, const char **port, const char **path)
void Service_CreateSubscription(UA_Server *server, UA_Session *session, const UA_CreateSubscriptionRequest *request, UA_CreateSubscriptionResponse *response)
Subscription Service Set Subscriptions are used to report Notifications to the Client.
#define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG,...)
Log Helper
#define UA_STATUSCODE_BADEXPECTEDSTREAMTOBLOCK
#define UA_STATUSCODE_BADSTRUCTUREMISSING
UA_StatusCode __UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, const void *in, const UA_DataType *inDataType)
#define UA_NS0ID_HASEFFECT
void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session, const UA_CreateMonitoredItemsRequest *request, UA_CreateMonitoredItemsResponse *response)
MonitoredItem Service Set Clients define MonitoredItems to subscribe to data and Events.
UA_DeleteReferencesItem * referencesToDelete
void Service_Read(UA_Server *server, UA_Session *session, const UA_ReadRequest *request, UA_ReadResponse *response)
Query Service Set This Service Set is used to issue a Query to a Server.
#define UA_TYPES_WRITEVALUE
#define UA_SECURE_MESSAGE_HEADER_LENGTH
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE
ObjectTypeAttributes ^^^^^^^^^^^^^^^^^^^^ The attributes for an object type node. ...
UA_ExtensionObject userIdentityToken
UA_StatusCode UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
UA_Boolean UA_String_equal(const UA_String *s1, const UA_String *s2)
UserTokenPolicy ^^^^^^^^^^^^^^^ Describes a user token that can be used with a server.
UA_ResponseHeader responseHeader
UA_Boolean hasInnerDiagnosticInfo
#define UA_STATUSCODE_BADENTRYEXISTS
#define CHECK_DATATYPE_SCALAR(EXP_DT)
#define UA_STATUSCODE_BADVIEWVERSIONINVALID
struct UA_DelayedJob UA_DelayedJob
#define UA_NS0ID_HASSUBTYPE
UA_BrowseResultMask
BrowseResultMask ^^^^^^^^^^^^^^^^ A bit mask which specifies what should be returned in a browse resp...
#define UA_TYPES_USERTOKENTYPE
UA_RequestHeader requestHeader
#define UA_TYPES_ADDREFERENCESRESPONSE
UA_UInt32 revisedMaxKeepAliveCount
void(* deleteMembers)(UA_ServerNetworkLayer *nl)
Deletes the network content.
UA_StatusCode UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, UA_UInt32 **outArrayDimensions, size_t *outArrayDimensionsSize)
UA_ValueSource
VariableNode
#define UA_TYPES_CLOSESESSIONREQUEST
#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE
UA_UInt32 protocolVersion
UA_ResponseHeader responseHeader
void Service_Call_single(UA_Server *server, UA_Session *session, const UA_CallMethodRequest *request, UA_CallMethodResult *result)
UA_UInt16 UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal)
#define UA_NS0ID_ADDNODESREQUEST_ENCODING_DEFAULTBINARY
void * UA_new(const UA_DataType *type)
The following functions are used for generic handling of data types.
UA_UInt32 requestedMaxKeepAliveCount
#define UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN
#define UA_STATUSCODE_BADSERVERURIINVALID
#define UA_NS0ID_DATAVALUE
FindServersResponse ^^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
UA_StatusCode UA_Server_setVariableNode_valueCallback(UA_Server *server, const UA_NodeId nodeId, const UA_ValueCallback callback)
#define UA_STATUSCODE_BADNODENOTINVIEW
UA_StatusCode __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_InstantiationCallback *instantiationCallback, UA_NodeId *outNewNodeId)
size_t outputArgumentsSize
CloseSessionResponse ^^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_TYPES_FINDSERVERSREQUEST
UA_StatusCode UA_Server_run(UA_Server *server, volatile UA_Boolean *running)
#define MANUFACTURER_NAME
UA_UInt32 maxResponseMessageSize
UA_DateTime serverTimestamp
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
UA_String UA_XmlElement
XmlElement ^^^^^^^^^^ An XML element.
NodeAttributes ^^^^^^^^^^^^^^ The base attributes for all nodes.
NotificationMessage ^^^^^^^^^^^^^^^^^^^.
UA_ExpandedNodeId parentNodeId
#define UA_TYPES_REPUBLISHREQUEST
#define UA_STATUSCODE_BADSECURECHANNELIDINVALID
UA_NodeId referenceTypeId
#define UA_USEC_TO_DATETIME
#define UA_NS0ID_PROPERTYTYPE
UA_UInt16 availableContinuationPoints
void Service_CloseSession(UA_Server *server, UA_Session *session, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response)
#define UA_TYPES_BROWSEPATHRESULT
#define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER
#define UA_NS0ID_HASTYPEDEFINITION
#define UA_MINMESSAGESIZE
#define UA_PRINTF_STRING_DATA(STRING)
#define UA_NS0ID_HIERARCHICALREFERENCES
UA_UInt32 revisedLifetimeCount
UA_BrowsePathTarget * targets
Networking Client-server connection is represented by a UA_Connection structure.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO
#define UA_NS0ID_TYPESFOLDER
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG
UA_UInt32 * monitoredItemIds
UA_WriteValue * nodesToWrite
#define UA_TYPES_DELETENODESITEM
UA_DataValue UA_Server_read(UA_Server *server, const UA_ReadValueId *item, UA_TimestampsToReturn timestamps)
Reading and Writing Node Attributes The functions for reading and writing node attributes call the re...
#define UA_STATUSCODE_BADTOOMANYARGUMENTS
#define UA_NS0ID_CREATESUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
DataChangeFilter ^^^^^^^^^^^^^^^^.
UA_MonitoredItemCreateRequest * itemsToCreate
#define UA_STATUSCODE_BADBOUNDNOTFOUND
MethodAttributes ^^^^^^^^^^^^^^^^ The attributes for a method node.
UnregisterNodesRequest ^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
#define UA_NS0ID_BYTESTRING
#define UA_STATUSCODE_BADNOCOMMUNICATION
#define UA_TYPES_SERVERSTATUSDATATYPE
#define UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID
#define UA_TYPES_DATACHANGENOTIFICATION
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT
#define UA_STRING_STATIC_NULL
#define UA_STATUSCODE_BADINVALIDARGUMENT
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session, const UA_SetMonitoringModeRequest *request, UA_SetMonitoringModeResponse *response)
void Service_FindServers(UA_Server *server, UA_Session *session, const UA_FindServersRequest *request, UA_FindServersResponse *response)
Discovery Service Set This Service Set defines Services used to discover the Endpoints implemented by...
#define UA_STATUSCODE_GOODPOSTACTIONFAILED
#define UA_STATUSCODE_UNCERTAINSUBNORMAL
UA_StatusCode(* start)(UA_ServerNetworkLayer *nl, UA_Logger logger)
#define UA_fd_isset(fd, fds)
UA_NumericRangeDimension * dimensions
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOODCOMMUNICATIONEVENT
const UA_calcSizeBinarySignature calcSizeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NODESTORE_MINSIZE
#define UA_STATUSCODE_BADOBJECTDELETED
UA_Boolean hasNamespaceUri
#define UA_STATUSCODE_BADTCPENDPOINTURLINVALID
union UA_ExtensionObject::@1 content
UA_ApplicationDescription server
#define UA_STATUSCODE_GOODSHUTDOWNEVENT
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE
#define UA_STATUSCODE_BADSECURITYMODEREJECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_SHUTDOWNREASON
UA_Boolean deleteTargetReferences
#define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER
UA_UInt32 protocolVersion
TcpHelloMessage ^^^^^^^^^^^^^^^ Hello Message.
#define UA_STATUSCODE_BADNODECLASSINVALID
UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionID)
ChannelSecurityToken ^^^^^^^^^^^^^^^^^^^^ The token that identifies a set of keys for an active secur...
UA_Client_Authentication authenticationMethod
#define UA_TYPES_NODEATTRIBUTES
#define UA_TYPES_MODIFYMONITOREDITEMSRESPONSE
#define UA_TYPES_DEADBANDTYPE
Server Configuration The following structure is passed to a new server for configuration.
#define UA_TYPES_REFERENCETYPEATTRIBUTES
#define UA_STATUSCODE_BADCERTIFICATEREVOKED
#define UA_NS0ID_CREATEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADNOMATCH
#define UA_STATUSCODE_GOODEDITED
UA_AttributeId
Standard-Defined Constants This section contains numerical and string constants that are defined in t...
#define TAILQ_FIRST(head)
#define UA_TYPES_CALLREQUEST
ViewAttributes ^^^^^^^^^^^^^^ The attributes for a view node.
#define UA_ASSERT_RCU_LOCKED()
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME
enum UA_NodeIdType identifierType
void( UA_ProcessMessageCallback)(void *application, UA_SecureChannel *channel, UA_MessageType messageType, UA_UInt32 requestId, const UA_ByteString *message)
Chunking
#define UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS
#define UA_STATUSCODE_BADSEMPAHOREFILEMISSING
#define UA_STATUSCODE_BADDISCOVERYURLMISSING
UA_BrowseDescription * nodesToBrowse
#define UA_NS0ID_MODELLINGRULE_MANDATORY
DeleteNodesItem ^^^^^^^^^^^^^^^ A request to delete a node to the server address space.
#define UA_NodeStore_newDataTypeNode()
UA_CallMethodRequest * methodsToCall
struct UA_NodeStoreEntry UA_NodeStoreEntry
UA_MessageSecurityMode securityMode
#define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG,...)
UA_MonitoredItemModifyRequest * itemsToModify
int16_t UA_Int16
Int16 ^^^^^ An integer value between -32 768 and 32 767.
UA_StatusCode UA_EndpointUrl_split(const char *endpointUrl, char *hostname, UA_UInt16 *port, const char **path)
EndpointURL Helper ^^^^^^^^^^^^^^^^^^.
UA_Boolean includeSubtypes
#define MAXTIMEOUT
There are four types of job execution:
#define UA_TRANSPORT_CHUNKTYPE
UA_StatusCode UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences)
#define UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME
#define UA_STATUSCODE_BADCERTIFICATEISSUERTIMEINVALID
void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel)
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Boolean isAbstract
QueryDataDescription ^^^^^^^^^^^^^^^^^^^^.
#define UA_OPEN62541_VER_MINOR
UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server)
UA_UInt32 receiveBufferSize
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_ResponseHeader responseHeader
#define UA_TYPES_BYTE
Byte ^^^^.
UA_LocalizedText displayName
BrowseNextResponse ^^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
#define UA_NS0ID_BASEOBJECTTYPE
DeleteReferencesItem ^^^^^^^^^^^^^^^^^^^^ A request to delete a node from the server address space...
int32_t UA_Int32
Int32 ^^^^^ An integer value between -2 147 483 648 and 2 147 483 647.
void UA_Session_updateLifetime(UA_Session *session)
#define UA_STATUSCODE_UNCERTAINDOMINANTVALUECHANGED
MonitoredItemCreateResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADSECURECHANNELCLOSED
UA_ConnectionConfig localConf
UA_DateTime UA_DateTime_nowMonotonic(void)
UA_String encryptionAlgorithm
UA_ExpandedNodeId targetId
const UA_String UA_STRING_NULL
#define UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE
UA_ByteString * continuationPoints
UA_UInt32 UA_UInt32_random(void)
#define UA_TYPES_MONITORINGPARAMETERS
ExpandedNodeId ^^^^^^^^^^^^^^ A NodeId that allows the namespace URI to be specified instead of an in...
ParsingResult ^^^^^^^^^^^^^.
UA_UInt16 addNamespace(UA_Server *server, const UA_String name)
#define UA_PRINTF_GUID_FORMAT
Convenience macros for complex types ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
CallMethodRequest ^^^^^^^^^^^^^^^^^.
void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session, const UA_DeleteSubscriptionsRequest *request, UA_DeleteSubscriptionsResponse *response)
UA_UInt32 maxNotificationsPerPublish
#define UA_STATUSCODE_BADPROTOCOLVERSIONUNSUPPORTED
#define UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN
#define UA_realloc(ptr, size)
UA_RequestHeader requestHeader
#define UA_NS0ID_STATUSCODE
UA_ExpandedNodeId targetNodeId
UA_ByteString serverCertificate
ActivateSessionResponse ^^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
VariableAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a variable node.
#define UA_STATUSCODE_BADSERVERINDEXINVALID
UA_IdType
IdType ^^^^^^ The type of identifier used in a node id.
UA_StatusCode UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequenceNumber)
void UA_random_seed(UA_UInt64 seed)
Random Number Generator If UA_ENABLE_MULTITHREADING is defined, then the seed is stored in thread loc...
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADREQUESTTYPEINVALID
#define UA_TYPES_SERVICEFAULT
#define UA_TYPES_APPLICATIONTYPE
UA_StatusCode UA_NodeStore_replace(UA_NodeStore *ns, UA_Node *node)
UA_Boolean deleteSubscriptions
const char * LogLevelNames[6]
UA_ChunkType
ChunkType ^^^^^^^^^ Type of the chunk.
UA_UInt16 serverPicoseconds
UA_ApplicationDescription clientDescription
WriteResponse ^^^^^^^^^^^^^.
SubscriptionAcknowledgement ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Server_delete(UA_Server *server)
UA_Double minimumSamplingInterval
UA_StatusCode UA_Variant_setArrayCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADSYNTAXERROR
#define UA_TYPES_MONITOREDITEMNOTIFICATION
#define UA_STATUSCODE_BADREFERENCENOTALLOWED
UA_CallMethodResult * results
#define UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME
UserIdentityToken ^^^^^^^^^^^^^^^^^ A base type for a user identity token.
UA_StatusCode(* send)(UA_Connection *connection, UA_ByteString *buf)
UA_StatusCode UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_String targetServerUri, const UA_ExpandedNodeId targetNodeId, UA_NodeClass targetNodeClass)
#define UA_NS0ID_ACTIVATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_DATACHANGETRIGGER
#define UA_STATUSCODE_BADSEQUENCENUMBERINVALID
QueryNextResponse ^^^^^^^^^^^^^^^^^.
UA_NodeAttributesMask
NodeAttributesMask ^^^^^^^^^^^^^^^^^^ The bits used to specify default attributes for a new node...
#define UA_TYPES_VARIABLEATTRIBUTES
UA_BrowsePath * browsePaths
#define UA_NS0ID_DELETEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_Boolean releaseContinuationPoints
#define UA_TYPES_CALLMETHODREQUEST
#define UA_NODEIDTYPE_NUMERIC_FOURBYTE
#define UA_STATUSCODE_BADOUTOFMEMORY
UA_LocalizedText inverseName
UA_Double revisedSamplingInterval
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYACKED
#define UA_NodeStore_newObjectNode()
#define UA_TYPES_CHANNELSECURITYTOKEN
UA_MethodCallback attachedMethod
#define UA_TYPES_BOOLEAN
Boolean ^^^^^^^.
#define UA_STATUSCODE_BADSESSIONNOTACTIVATED
#define UA_STATUSCODE_GOODCOMPLETESASYNCHRONOUSLY
#define SIMPLEQ_REMOVE_HEAD(head, field)
size_t arrayDimensionsSize
#define UA_NS0ID_SERVER_SERVERARRAY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADMAXCONNECTIONSREACHED
UA_MonitoredItem * UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemID)
#define UA_TYPES_BROWSEDESCRIPTION
#define UA_TYPES_CONTENTFILTERELEMENTRESULT
#define UA_STATUSCODE_BADBOUNDNOTSUPPORTED
#define UA_TYPES_REFERENCENODE
#define UA_NODEIDTYPE_NUMERIC_COMPLETE
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN
void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server)
#define UA_STATUSCODE_BADSERVICEUNSUPPORTED
UA_UInt32 maxNotificationsPerPublish
Guid ^^^^ A 16 byte value that can be used as a globally unique identifier.
UA_MessageSecurityMode
MessageSecurityMode ^^^^^^^^^^^^^^^^^^^ The type of security to use on a message. ...
UA_StatusCode UA_Node_copyAnyNodeClass(const UA_Node *src, UA_Node *dst)
String ^^^^^^ A sequence of Unicode characters.
#define UA_STATUSCODE_BADRESOURCEUNAVAILABLE
const UA_Node * UA_NodeStore_get(UA_NodeStore *ns, const UA_NodeId *nodeid)
MonitoringParameters ^^^^^^^^^^^^^^^^^^^^.
#define SIMPLEQ_HEAD(name, type)
UA_DeadbandType
DeadbandType ^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
#define UA_TYPES_MONITOREDITEMMODIFYRESULT
UA_UInt32 monitoredItemId
#define UA_assert(ignore)
#define UA_NS0ID_DELETESUBSCRIPTIONSREQUEST_ENCODING_DEFAULTBINARY
#define SIMPLEQ_INIT(head)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER
void UA_Connection_attachSecureChannel(UA_Connection *connection, UA_SecureChannel *channel)
size_t inputArgumentsSize
UA_StatusCode UA_Server_setObjectTypeNode_lifecycleManagement(UA_Server *server, UA_NodeId nodeId, UA_ObjectLifecycleManagement olm)
UA_NodeId authenticationToken
#define UA_TYPES_VIEWATTRIBUTES
#define UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS
UA_RequestHeader requestHeader
size_t(* stop)(UA_ServerNetworkLayer *nl, UA_Job **jobs)
UA_UInt32 receiveSequenceNumber
#define UA_STATUSCODE_BADNODELETERIGHTS
#define UA_STATUSCODE_BADPARENTNODEIDINVALID
DeleteMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADEVENTNOTACKNOWLEDGEABLE
UA_StatusCode UA_Connection_completeMessages(UA_Connection *connection, UA_ByteString *message, UA_Boolean *realloced)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_AGGREGATEFUNCTIONS
#define UA_STATUSCODE_BADNONCEINVALID
UA_Boolean UA_NodeId_isNull(const UA_NodeId *p)
void UA_Node_deleteMembersAnyNodeClass(UA_Node *node)
#define UA_TYPES_LOCALIZEDTEXT
LocalizedText ^^^^^^^^^^^^^.
AddReferencesResponse ^^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
const UA_EXPORT UA_ServerConfig UA_ServerConfig_standard
UA_StatusCode(* UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle)
UA_Boolean userExecutable
UA_Double requestedPublishingInterval
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST
UA_ConnectionConfig remoteConf
UA_BrowseResult UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint, const UA_ByteString *continuationPoint)
const UA_Node * getNodeType(UA_Server *server, const UA_Node *node)
#define UA_TYPES_RESPONSEHEADER
UA_StatusCode UA_Server_run_shutdown(UA_Server *server)
#define UA_STATUSCODE_BADIDENTITYTOKENREJECTED
#define UA_NODE_VARIABLEATTRIBUTES
#define UA_STATUSCODE_BADSESSIONCLOSED
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOOD
#define UA_STATUSCODE_BADNOTTYPEDEFINITION
#define UA_STATUSCODE_BADNOTHINGTODO
#define UA_NS0ID_REGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_GOODCLAMPED
size_t referencesToAddSize
UA_EXPORT const UA_DataType UA_TRANSPORT[UA_TRANSPORT_COUNT]
struct UA_SecureChannelManager UA_SecureChannelManager
UA_ExpandedNodeId requestedNewNodeId
#define UA_STATUSCODE_BADNOTREADABLE
UA_StatusCode UA_Variant_setScalarCopy(UA_Variant *v, const void *p, const UA_DataType *type)
void UA_SecureChannel_detachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_TYPES_UNREGISTERNODESRESPONSE
void Service_ModifySubscription(UA_Server *server, UA_Session *session, const UA_ModifySubscriptionRequest *request, UA_ModifySubscriptionResponse *response)
UA_UInt32 requestedLifetimeCount
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXHISTORYCONTINUATIONPOINTS
UA_StatusCode typeCheckValue(UA_Server *server, const UA_NodeId *targetDataTypeId, UA_Int32 targetValueRank, size_t targetArrayDimensionsSize, const UA_UInt32 *targetArrayDimensions, const UA_Variant *value, const UA_NumericRange *range, UA_Variant *editableValue)
#define UA_NS0ID_ROOTFOLDER
UA_ResponseHeader responseHeader
UA_StatusCode UA_Client_getEndpoints(UA_Client *client, const char *serverUrl, size_t *endpointDescriptionsSize, UA_EndpointDescription **endpointDescriptions)
int8_t UA_SByte
SByte ^^^^^ An integer value between -128 and 127.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_LOCALEIDARRAY
UA_Boolean UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2)
#define UA_TYPES_FILTEROPERATOR
#define UA_TYPES_CLOSESECURECHANNELREQUEST
#define UA_NS0ID_SETMONITORINGMODEREQUEST_ENCODING_DEFAULTBINARY
CloseSessionRequest ^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_STATUSCODE_BADCERTIFICATETIMEINVALID
ReadResponse ^^^^^^^^^^^^.
#define UA_STATUSCODE_GOODSUBSCRIPTIONTRANSFERRED
UA_BrowseDirection
BrowseDirection ^^^^^^^^^^^^^^^ The directions of the references to return.
#define UA_NS0ID_DATETIME
WriteRequest ^^^^^^^^^^^^.
const UA_StatusCodeDescription * UA_StatusCode_description(UA_StatusCode code)
UA_StatusCode MonitoredItem_unregisterSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_TYPES_VIEWDESCRIPTION
void UA_NodeStore_delete(UA_NodeStore *ns)
#define UA_TYPES_QUERYFIRSTREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS
#define UA_NS0ID_STRUCTURE
UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range)
#define UA_STATUSCODE_BADUSERACCESSDENIED
#define UA_STATUSCODE_UNCERTAINNOTALLNODESAVAILABLE
#define UA_NS0ID_SETPUBLISHINGMODEREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode writeValueRankAttribute(UA_Server *server, UA_VariableNode *node, UA_Int32 valueRank, UA_Int32 constraintValueRank)
void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesRequest *request, UA_AddNodesResponse *response)
NodeManagement Service Set This Service Set defines Services to add and delete AddressSpace Nodes and...
UA_StatusCode __UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_NodeId *outNewNodeId)
#define UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED
ActivateSessionRequest ^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
#define UA_STATUSCODE_BADCONNECTIONCLOSED
UA_SecureChannel * channel
UA_StatusCode UA_SecureChannel_sendBinaryMessage(UA_SecureChannel *channel, UA_UInt32 requestId, const void *content, const UA_DataType *contentType)
#define UA_STATUSCODE_GOODENTRYINSERTED
#define UA_STATUSCODE_BADCOMMUNICATIONERROR
#define UA_TYPES_STATUSCODE
StatusCode ^^^^^^^^^^.
void UA_SessionManager_deleteMembers(UA_SessionManager *sm)
size_t(* UA_calcSizeBinarySignature)(const void *UA_RESTRICT p, const UA_DataType *contenttype)
#define UA_TYPES_BROWSEDIRECTION
CloseSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_STATUSCODE_BADREQUESTHEADERINVALID
#define UA_TYPES_REGISTERNODESREQUEST
#define UA_TYPES_EXTENSIONOBJECT
ExtensionObject ^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES
#define UA_TYPES_UNREGISTERNODESREQUEST
#define PCG32_INITIALIZER
UA_SessionManager sessionManager
UA_ResponseHeader responseHeader
UA_UInt32 requestedMaxKeepAliveCount
SetMonitoringModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_UInt32 revisedQueueSize
#define UA_TYPES_BROWSERESULT
ServerStatusDataType ^^^^^^^^^^^^^^^^^^^^.
UA_ByteString serverNonce
void(* releaseSendBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_Connection * closeConnection
#define LIST_FOREACH_SAFE(var, head, field, tvar)
void Service_DeleteReferences(UA_Server *server, UA_Session *session, const UA_DeleteReferencesRequest *request, UA_DeleteReferencesResponse *response)
UA_UInt32 UA_NodeId_hash(const UA_NodeId *n)
void Service_GetEndpoints(UA_Server *server, UA_Session *session, const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response)
UA_NodeId referenceTypeId
UA_StatusCode UA_Variant_setRange(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_NumericRange range)
#define UA_STATUSCODE_BADSECURITYMODEINSUFFICIENT
UA_Double revisedSamplingInterval
BrowsePath ^^^^^^^^^^ A request to translate a path into a node id.
#define UA_TYPES_QUERYNEXTRESPONSE
DeleteSubscriptionsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
RelativePathElement ^^^^^^^^^^^^^^^^^^^ An element in a relative path.
#define UA_STATUSCODE_BADSECURITYCHECKSFAILED
UA_LocalizedText displayName
UA_NotificationMessage notificationMessage
UA_FilterOperator
FilterOperator ^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONNOTSHELVED
#define UA_TYPES_MONITOREDITEMCREATERESULT
#define UA_calloc(num, size)
uint8_t UA_Byte
Byte ^^^^ An integer value between 0 and 255.
BrowseResult ^^^^^^^^^^^^ The result of a browse operation.
UA_DateTimeStruct UA_DateTime_toStruct(UA_DateTime t)
void UA_Session_init(UA_Session *session)
#define UA_STATUSCODE_BADMETHODINVALID
#define UA_STATUSCODE_BADSENSORFAILURE
#define UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN
void UA_SecureChannel_deleteMembersCleanup(UA_SecureChannel *channel)
#define UA_STATUSCODE_BADFILTEROPERANDCOUNTMISMATCH
#define UA_NS0ID_HASNOTIFIER
#define UA_TYPES_DELETEREFERENCESREQUEST
UA_QualifiedName dataEncoding
UA_UInt32 * subscriptionIds
#define UA_STATUSCODE_BADAGGREGATENOTSUPPORTED
VariableTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^ The attributes for a variable type node.
UA_Boolean hasInnerStatusCode
#define UA_TYPES_NOTIFICATIONMESSAGE
#define UA_TYPES_TIMESTAMPSTORETURN
UA_ReferenceDescription * references
#define UA_STATUSCODE_BADNOSUBSCRIPTION
UA_StatusCode(* getSendBuffer)(UA_Connection *connection, size_t length, UA_ByteString *buf)
CloseSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_TYPES_SECURITYTOKENREQUESTTYPE
UA_AddNodesResult * results
#define UA_STATUSCODE_BADUNEXPECTEDERROR
#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST
#define UA_STATUSCODE_BADWRITENOTSUPPORTED
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SOFTWARECERTIFICATES
UA_Boolean hasAdditionalInfo
UA_ByteString clientNonce
#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG
#define UA_NS0ID_BUILDINFOTYPE
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADWAITINGFORRESPONSE
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
#define UA_TYPES_ANONYMOUSIDENTITYTOKEN
void UA_delete(void *p, const UA_DataType *type)
UA_ServerState
ServerState ^^^^^^^^^^^.
UA_UInt32 * availableSequenceNumbers
#define UA_STATUSCODE_BADUNKNOWNRESPONSE
void UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_NodeId *sessionToken)
GetEndpointsRequest ^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response)
#define UA_NS0ID_HASHISTORICALCONFIGURATION
UA_StatusCode(* UA_copySignature)(const void *src, void *dst, const UA_DataType *type)
void pcg32_srandom_r(pcg32_random_t *rng, uint64_t initial_state, uint64_t initseq)
UA_ExpandedNodeId targetNodeId
UA_Boolean hasServerPicoseconds
#define UA_TYPES_RELATIVEPATHELEMENT
UA_ExtensionObject * notificationData
AddNodesResult ^^^^^^^^^^^^^^ A result of an add node operation.
#define UA_TYPES_DOUBLE
Double ^^^^^^.
#define LIST_INSERT_AFTER(listelm, elm, field)
void(* releaseRecvBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_String securityPolicyUri
UA_ServerNetworkLayer UA_ServerNetworkLayerTCP(UA_ConnectionConfig conf, UA_UInt16 port)
#define UA_STATUSCODE_BADCONTENTFILTERINVALID
CreateSessionResponse ^^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
const UA_ByteString UA_BYTESTRING_NULL
#define UA_STATUSCODE_BADFILTEROPERATORUNSUPPORTED
#define UA_TYPES_BROWSENEXTRESPONSE
UA_NodeClass
NodeClass ^^^^^^^^^ A mask specifying the class of the node.
UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
UA_UInt32 remainingPathIndex
UA_StatusCode UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst, const UA_NumericRange range)
#define UA_TYPES_INT64
Int64 ^^^^^.
#define UA_NS0ID_AGGREGATES
#define UA_STATUSCODE_BADSOURCENODEIDINVALID
UA_TimestampsToReturn
TimestampsToReturn ^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_EVENTTYPESFOLDER
UA_StatusCode UA_Server_addRepeatedJob(UA_Server *server, UA_Job job, UA_UInt32 interval, UA_Guid *jobId)
Repeated jobs
RegisterNodesRequest ^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a sessi...
size_t nodesToUnregisterSize
EndpointDescription ^^^^^^^^^^^^^^^^^^^ The description of a endpoint that can be used to access a se...
#define UA_BINARY_OVERLAYABLE_FLOAT
Float Endianness ^^^^^^^^^^^^^^^^ The definition UA_BINARY_OVERLAYABLE_FLOAT is true when the floatin...
UA_LocalizedText description
ObjectAttributes ^^^^^^^^^^^^^^^^ The attributes for an object node.
#define UA_NS0ID_SERVER_SERVICELEVEL
#define UA_TYPES_QUERYNEXTREQUEST
#define UA_STATUSCODE_BADTCPSERVERTOOBUSY
#define UA_TYPES_ACTIVATESESSIONRESPONSE
#define UA_TYPES_REQUESTHEADER
UA_DataTypeMember * members
UA_ResponseHeader responseHeader
#define UA_TYPES_UINT16
UInt16 ^^^^^^.
UA_SecureChannel * channel
UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *type, UA_exchangeEncodeBuffer exchangeCallback, void *exchangeHandle, UA_ByteString *dst, size_t *offset) UA_FUNC_ATTR_WARN_UNUSED_RESULT
#define UA_TYPES_VARIANT
Variant ^^^^^^^.
void UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm, UA_DateTime nowMonotonic)
UA_UInt32 receiveBufferSize
UA_TimestampsToReturn timestampsToReturn
DeleteReferencesResponse ^^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server addre...
#define UA_TYPES_NODECLASS
#define UA_STATUSCODE_GOODOVERLOAD
void(* close)(UA_Connection *connection)
UA_NODE_BASEATTRIBUTES UA_Boolean executable
void UA_Variant_setArray(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADVIEWTIMESTAMPINVALID
void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response)
Session Service Set This Service Set defines Services for an application layer connection establishme...
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SERVERPROFILEARRAY
size_t availableSequenceNumbersSize
#define UA_STATUSCODE_BADIDENTITYTOKENINVALID
#define UA_fd_set(fd, fds)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES
struct UA_NotificationMessageEntry UA_NotificationMessageEntry
#define UA_STATUSCODE_BADBROWSEDIRECTIONINVALID
#define UA_STRING_STATIC(s)
#define TAILQ_FOREACH_SAFE(var, head, field, tvar)
#define UA_STATUSCODE_GOODLOCALOVERRIDE
#define SLIST_HEAD(name, type)
#define UA_TYPES_SERVERSTATE
#define LIST_INSERT_HEAD(head, elm, field)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY
MonitoredItemCreateRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
void(* UA_Logger)(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
The signature of the logger.
ModifyMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_SecurityTokenRequestType
SecurityTokenRequestType ^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether a token if being created or renew...
#define UA_NS0ID_HASEVENTSOURCE
UA_UInt32 * monitoredItemIds
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS
#define UA_STATUSCODE_BADSECURITYPOLICYREJECTED
UA_STATIC_ASSERT(sizeof(UA_MessageType)==sizeof(UA_Int32), enum_must_be_32bit)
#define UA_NS0ID_CLOSESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADINVALIDSTATE
#define UA_STATUSCODE_BADCONDITIONALREADYENABLED
#define UA_NS0ID_DIAGNOSTICINFO
#define UA_NS0ID_SERVER_GETMONITOREDITEMS
#define UA_STATUSCODE_BADFILTERLITERALINVALID
#define UA_STATUSCODE_BADARGUMENTSMISSING
#define UA_STATUSCODE_UNCERTAINSUBSTITUTEVALUE
#define UA_STATUSCODE_BADNODATAAVAILABLE
#define UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED
UA_StatusCode Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node, const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId, const UA_NodeId *typeDefinition, UA_InstantiationCallback *instantiationCallback, UA_NodeId *addedNodeId)
UA_NodeId referenceTypeId
UA_UInt32 * arrayDimensions
#define UA_TYPES_OBJECTTYPEATTRIBUTES
UA_StatusCode UA_Array_copy(const void *src, size_t size, void **dst, const UA_DataType *type)
#define UA_STATUSCODE_BADATTRIBUTEIDINVALID
UA_Double samplingInterval
UA_MonitoringMode monitoringMode
#define UA_TYPES_CREATESESSIONREQUEST
ContentFilterElementResult ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_BROWSEPATHTARGET
#define UA_TYPES_NODETYPEDESCRIPTION
#define UA_DATETIME_UNIX_EPOCH
#define UA_STATUSCODE_BADINVALIDTIMESTAMP
#define LIST_FOREACH(var, head, field)
void Service_Write(UA_Server *server, UA_Session *session, const UA_WriteRequest *request, UA_WriteResponse *response)
#define UA_TYPES_OBJECTATTRIBUTES
BrowseDescription ^^^^^^^^^^^^^^^^^ A request to browse the the references from a node...
#define UA_NS0ID_BASEVARIABLETYPE
#define UA_NodeStore_newMethodNode()
#define UA_STATUSCODE_BADCERTIFICATEURIINVALID
#define UA_NS0ID_MODELLINGRULETYPE
#define UA_STATUSCODE_BADTCPSECURECHANNELUNKNOWN
#define UA_NS0ID_SERVERSTATUSTYPE
UA_StatusCode UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId, UA_Boolean deleteTargetReferences)
#define UA_NS0ID_READREQUEST_ENCODING_DEFAULTBINARY
#define UA_NS0ID_EXPANDEDNODEID
struct session_list_entry session_list_entry
#define UA_RESTRICT
Non-aliasing pointers
#define UA_STATUSCODE_BADFILTEROPERATORINVALID
#define UA_TYPES_QUERYDATADESCRIPTION
void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session, const UA_ModifyMonitoredItemsRequest *request, UA_ModifyMonitoredItemsResponse *response)
int __secs_to_tm(long long t, struct tm *tm)
UA_StatusCode UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
size_t referencesToDeleteSize
#define UA_STATUSCODE_BADCONFIGURATIONERROR
#define UA_STATUSCODE_BADTOOMANYMONITOREDITEMS
UA_UInt32 revisedMaxKeepAliveCount
status(* UA_encodeBinarySignature)(const void *UA_RESTRICT src, const UA_DataType *type)
void Service_RegisterNodes(UA_Server *server, UA_Session *session, const UA_RegisterNodesRequest *request, UA_RegisterNodesResponse *response)
UA_UInt16 binaryEncodingId
size_t arrayDimensionsSize
UA_Boolean userExecutable
UA_SubscriptionAcknowledgement * subscriptionAcknowledgements
void Service_Republish(UA_Server *server, UA_Session *session, const UA_RepublishRequest *request, UA_RepublishResponse *response)
UA_String targetServerUri
UA_UInt32 requestedLifetime
UA_BrowseResult * results
#define UA_NS0ID_MODELLINGRULE_OPTIONAL
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_HASCHILD
union UA_NodeId::@0 identifier
UA_ByteString clientNonce
#define UA_NS0ID_OBJECTTYPESFOLDER
#define UA_TYPES_DATETIME
DateTime ^^^^^^^^.
UA_ReadValueId itemToMonitor
UA_ResponseHeader responseHeader
UA_Client * UA_Client_new(UA_ClientConfig config)
#define UA_STATUSCODE_BADDATATYPEIDUNKNOWN
UA_UsernamePasswordLogin usernamePasswords[2]
#define UA_NS0ID_REPUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_SETPUBLISHINGMODERESPONSE
#define UA_TYPES_MONITORINGMODE
#define UA_TYPES_REFERENCEDESCRIPTION
#define UA_TYPES_ADDREFERENCESREQUEST
UA_DataChangeTrigger
DataChangeTrigger ^^^^^^^^^^^^^^^^^.
#define UA_TYPES_VARIABLETYPEATTRIBUTES
size_t serverEndpointsSize
QueryFirstResponse ^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_APPLICATIONDESCRIPTION
size_t monitoredItemIdsSize
UA_ReadValueId * nodesToRead
UA_MonitoringMode monitoringMode
struct UA_SessionManager UA_SessionManager
UA_ExpandedNodeId targetId
RepublishRequest ^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADTCPNOTENOUGHRESOURCES
#define UA_TYPES_USERTOKENPOLICY
UA_NotificationMessage notificationMessage
#define UA_STATUSCODE_UNCERTAINENGINEERINGUNITSEXCEEDED
#define UA_STATUSCODE_BADFILTERNOTALLOWED
UA_RequestHeader requestHeader
DataChangeNotification ^^^^^^^^^^^^^^^^^^^^^^.
const char * LogCategoryNames[6]
UA_UInt32 sendSequenceNumber
const UA_DataType UA_TYPES[UA_TYPES_COUNT]
#define UA_TYPES_XMLELEMENT
XmlElement ^^^^^^^^^^.
UA_NodeId * nodesToRegister
#define UA_STRING_ALLOC(CHARS)
#define UA_TYPES_DIAGNOSTICINFO
DiagnosticInfo ^^^^^^^^^^^^^^.
#define UA_TYPES_CREATEMONITOREDITEMSREQUEST
#define UA_TYPES_DELETEMONITOREDITEMSRESPONSE
#define UA_STATUSCODE_BADWAITINGFORINITIALDATA
void Service_Browse_single(UA_Server *server, UA_Session *session, struct ContinuationPointEntry *cp, const UA_BrowseDescription *descr, UA_UInt32 maxrefs, UA_BrowseResult *result)
size_t monitoredItemsSize
UA_UInt32 monitoredItemId
#define UA_EMPTY_ARRAY_SENTINEL
PublishResponse ^^^^^^^^^^^^^^^.
UA_RelativePath relativePath
UA_StatusCode __UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, void *out, const UA_DataType *outDataType)
#define UA_TYPES_CREATEMONITOREDITEMSRESPONSE
UA_NodeId * registeredNodeIds
UA_UserTokenType
UserTokenType ^^^^^^^^^^^^^ The possible user token types.
UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *type)
UA_LocalizedText displayName
UA_StatusCode UA_Server_delayedCallback(UA_Server *server, UA_ServerCallback callback, void *data)
#define UA_malloc(_p_size)
UA_Variant * outputArguments
void UA_deleteMembers(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADTYPEDEFINITIONINVALID
UA_UserTokenPolicy * userIdentityTokens
#define UA_STATUSCODE_BADNODATA
BrowseRequest ^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address space...
UA_StatusCode UA_Connection_receiveChunksBlocking(UA_Connection *connection, UA_ByteString *chunks, UA_Boolean *realloced, UA_UInt32 timeout)
#define UA_STATUSCODE_UNCERTAINNOCOMMUNICATIONLASTUSABLEVALUE
UA_StatusCode UA_Server_write(UA_Server *server, const UA_WriteValue *value)
The following node attributes cannot be changed once a node has been created:
#define UA_STATUSCODE_BADFILTEROPERANDINVALID
size_t monitoredItemIdsSize
#define UA_TRANSPORT_TCPMESSAGEHEADER
#define UA_MAXCONTINUATIONPOINTS
NodeTypeDescription ^^^^^^^^^^^^^^^^^^^.
struct UA_DiagnosticInfo UA_DiagnosticInfo
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_REGISTERNODESRESPONSE
#define UA_TYPES_DELETENODESREQUEST
#define UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_UInt32 revisedQueueSize
UA_Double requestedSessionTimeout
UA_ResponseHeader responseHeader
#define UA_TYPES_CALLRESPONSE
#define UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED
#define UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID
#define TAILQ_INSERT_TAIL(head, elm, field)
BrowsePathResult ^^^^^^^^^^^^^^^^ The result of a translate opearation.
#define UA_BUILTIN_TYPES_COUNT
#define UA_STATUSCODE_BADREQUESTTOOLARGE
struct pcg_state_setseq_64 pcg32_random_t
#define UA_TYPES_ENDPOINTDESCRIPTION
OpenSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
#define UA_OPEN62541_VER_PATCH
#define UA_TYPES_NODEATTRIBUTESMASK
#define UA_NS0ID_FOLDERTYPE
#define UA_STATUSCODE_BADNOTWRITABLE
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_Double minimumSamplingInterval
UA_BrowseResult * results
AddReferencesRequest ^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
#define UA_TYPES_QUERYFIRSTRESPONSE
#define UA_STATUSCODE_BADREQUESTNOTALLOWED
#define UA_STATUSCODE_BADDECODINGERROR
#define UA_MSEC_TO_DATETIME
void UA_SecureChannel_attachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_STATUSCODE_BADMAXAGEINVALID
UA_RequestHeader requestHeader
#define UA_TYPES_CONTENTFILTERELEMENT
#define TAILQ_HEAD(name, type)
#define UA_STATUSCODE_BADNOENTRYEXISTS
UA_MessageType
MessageType ^^^^^^^^^^^ Message Type and whether the message contains an intermediate chunk...
#define UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED
UA_Boolean moreNotifications
#define UA_STATUSCODE_BADMONITORINGMODEINVALID
#define UA_TYPES_SETMONITORINGMODEREQUEST
#define UA_TYPES_NODEID
NodeId ^^^^^^.
UA_StatusCode UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length)
size_t endpointDescriptionsSize
ModifySubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
UnregisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
struct UA_Job::@5::@7 methodCall
PublishRequest ^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_NAMESPACEARRAY
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_INPUTARGUMENTS
UA_AsymmetricAlgorithmSecurityHeader serverAsymAlgSettings
MonitoredItemModifyRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADDOMINANTVALUECHANGED
#define SIMPLEQ_INSERT_TAIL(head, elm, field)
#define UA_STATUSCODE_BADEVENTIDUNKNOWN
int64_t UA_Int64
Int64 ^^^^^ An integer value between -9 223 372 036 854 775 808 and 9 223 372 036 854 775 807...
#define UA_TYPES_CREATESUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADNODEIDREJECTED
#define UA_TYPES_EXPANDEDNODEID
ExpandedNodeId ^^^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
CreateMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_CONTENTFILTERRESULT
#define UA_TYPES_DATATYPEATTRIBUTES
void Service_BrowseNext(UA_Server *server, UA_Session *session, const UA_BrowseNextRequest *request, UA_BrowseNextResponse *response)
UA_NodeId referenceTypeId
#define LIST_REMOVE(elm, field)
#define UA_TYPES_BROWSERESULTMASK
#define UA_STATUSCODE_BADAGGREGATEINVALIDINPUTS
#define UA_TRANSPORT_TCPERRORMESSAGE
void Service_SetPublishingMode(UA_Server *server, UA_Session *session, const UA_SetPublishingModeRequest *request, UA_SetPublishingModeResponse *response)
#define UA_TYPES_ADDNODESRESULT
#define UA_PRINTF_STRING_FORMAT
MonitoredItemNotification ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADNODEIDINVALID
BrowsePathTarget ^^^^^^^^^^^^^^^^ The target of the translated path.
const UA_VariableTypeNode * getVariableNodeType(UA_Server *server, const UA_VariableNode *node)
#define UA_NS0ID_SERVERSTATE
ModifySubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYCONFIRMED
ModifyMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Connection_detachSecureChannel(UA_Connection *connection)
#define UA_STATUSCODE_BADSHUTDOWN
#define CHECK_ATTRIBUTES(TYPE)
UA_LocalizedText description
AnonymousIdentityToken ^^^^^^^^^^^^^^^^^^^^^^ A token representing an anonymous user.
#define UA_TYPES_OPENSECURECHANNELRESPONSE
UA_StatusCode(* UA_EditNodeCallback)(UA_Server *, UA_Session *, UA_Node *, const void *)
UA_StatusCode UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server)
#define UA_STATUSCODE_BADCONDITIONALREADYSHELVED
#define UA_NODE_BASEATTRIBUTES
#define UA_NS0ID_CALLREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_COUNT
Every type is assigned an index in an array containing the type descriptions.
LocalizedText ^^^^^^^^^^^^^ Human readable text with an optional locale identifier.
UA_Boolean hasSourceTimestamp
UA_UInt32 revisedLifetimeCount
#define UA_STATUSCODE_BADTCPMESSAGETYPEINVALID
#define UA_TYPES_BUILDINFO
#define UA_TYPES_GETENDPOINTSRESPONSE
UA_ChannelSecurityToken nextSecurityToken
#define UA_STATUSCODE_UNCERTAINLASTUSABLEVALUE
void UA_MoniteredItem_SampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem)
UA_RequestHeader requestHeader
ContentFilterElement ^^^^^^^^^^^^^^^^^^^^.
#define UA_TRANSPORT_SEQUENCEHEADER
#define UA_STATUSCODE_BADCERTIFICATEISSUERUSENOTALLOWED
#define UA_STATUSCODE_BADENDOFSTREAM
UA_StatusCode UA_Server_removeRepeatedJob(UA_Server *server, UA_Guid jobId)
#define UA_TYPES_QUALIFIEDNAME
QualifiedName ^^^^^^^^^^^^^.
UA_LocalizedText displayName
#define UA_NS0ID_BROWSEREQUEST_ENCODING_DEFAULTBINARY